- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
什么是优雅的设计模式(GoF模式)在c++中的实现?
谁能给我一些基于模板(可以重用)的设计模式实现的例子?
示例(基于模板的单例):-
template<typename T>
class Singleton : public boost::noncopyable
{
public:
static Singleton& GetInstance()
{
boost::call_once(&CreateInstance, m_onceFlg);
return *m_pInstance;
}
virtual ~Singleton()
{
}
protected:
Singleton ()
{
}
static void CreateInstance()
{
m_pInstance.reset(new T());
}
private:
static boost::once_flag m_onceFlg;
static boost::scoped_ptr<T> m_pInstance;
};
最佳答案
根据我的经验,确实没有好的设计模式模板库。如果没有警告或对试图将自己插入其中的类施加难以实现的限制,设计模式很难作为具体模板正确捕获。
让我们把你的Singleton
例子。好吧,我实际上要重写它,这样我就不必使用 Boost 了:
template <typename T>
class Singleton {
Singleton (const Singleton<T> &) = delete;
Singleton & operator = (const Singleton<T> &) = delete;
static Singleton<T> & GetInstanceInternal () {
static T instance;
return instance;
}
protected:
Singleton () {}
~Singleton () {}
public:
static T & GetInstance () {
return static_cast<T &>(GetInstanceInternal());
}
};
虽然这使得 Singleton<T>
一个单例,真正想要的是制作 T
一个单例。好吧,你可能会说,这没问题,因为用法是 T
应该继承自 Singleton<T>
(由 Singleton::GetInstanceInternal()
强制执行):
class Foo : public Singleton<Foo> {
public:
void foo () { /*...*/ }
};
一个天真的程序员会认为“工作完成了!”,因为自Foo
继承自 Singleton<Foo>
,这使得 Foo
一个单例。但它不会,因为它不会阻止这种情况:
Foo x;
要解决此问题,构造函数应设为私有(private)(因此,Singleton<Foo>
需要成为好友)。为了防止直接调用析构函数,它也应该设为私有(private)。
class Foo : public Singleton<Foo> {
friend class Singleton<Foo>;
Foo () {}
~Foo () {}
public:
void foo () { /*...*/ }
};
所以,除了继承Singleton<Foo>
还有一些额外的要求,单靠继承是无法正确执行的。所有这些要求都可以记录下来,但可以说使用模板变得没那么有用了,而且它几乎与将单例功能放入 Foo
中一样多。直接。
关于c++ - 设计模式(GoF patterns)在c++中的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496119/
既然 GOF 的书是在 .Net 出现之前就整理好的,那么 GOF 中描述的特定模式是否不适合 .Net?如果是,原因是什么? 这是一个与最近赏金相关的问题 discussion . 最佳答案 GoF
此模式使用抽象工厂,然后使用工厂的实现。 我确定这两个类有一个标准的命名约定,但我不知道它是什么。 例如: public abstract class ChocolateFactory { }; pu
从 java 数据集中计算拟合优度 (GOF) 的选项是什么,我正在查看 apache math 3.0 库,但我无法理解使用它计算 GOF 的方法。对其他库或 math 3.0 有什么建议吗? 最佳
此主题的 Stackover 流相关帖子: Post_1和 Post_2 上面的帖子很好,但我仍然无法回答我的困惑,因此我把它作为一个新帖子放在这里。 我的问题 基于 GOF 的 Elements o
是否有任何 C# GOF 设计模式示例?我一直在寻找 this site确实有示例,但“C# 优化”示例仅在您购买其中一种产品时可用。 最佳答案 Steven John Metsker 写的一本名为“
我应该用 Java 创建一个迷你命令解释器 (System.in),以支持使用适当的 GoF 模式对图形对象进行操作。解释器的语法是一种简单的 EBNF 语言,如下所示:` ::=|||||||| :
让我们面对现实吧。单例模式是 highly controversial围墙两边都有大批程序员的话题。有些人觉得 Singleton 只不过是一个美化的全局变量,而另一些人则坚信模式并不断使用它。我不想
自从我开始学习 F#和 OCaml去年,我阅读了大量文章,这些文章坚持认为设计模式(尤其是在 Java 中)是命令式语言中缺失功能的解决方法。我找到的一篇文章 makes a fairly stron
我已阅读 wikipedia 装饰器模式用于.Net和Java IO类。 有人能解释一下这是如何使用的吗?举个可能的例子,它有什么好处? 维基百科上有一个 Windows 表单 示例,但我想知道 Ja
我们目前正在将 Access 应用程序大规模转换为 .NET 前端。许多 Access Apps 都有报表和创建 RDLC(或 Crystal rpt)的方法,并且带有数据集填充和绑定(bind)的主
我们需要构建一个解决方案来处理销售订单。处理是连续进行的:每个步骤负责特定的任务:检查客户是否有信用,检查所需元素是否有库存等。 我们想到使用 chain of responsibility patt
四人帮 Design Patterns使用文字处理器作为至少一些模式的示例,尤其是 Composite 和 Flyweight。 除了使用 C 或 C++ 之外,您真的可以使用这些模式和它们带来的面向
我正在模拟一种情况,其中有: NotificationBox:观察者 list1, list2, list3:主题 现在我会制作一张图表,其中使用观察者模式描述每个列表实现不同类型的 notify()
我正在讨论一些设计模式问题,并查看了 GoF 中装饰器模式的定义和示例。它说 Attach additional responsibilities to an object dynamically.
我很想知道哪个 GoF 设计模式直接转化为特定的 SOLID 原则?例如,我认为(在我看来)策略模式转化为依赖倒置原则。 不幸的是,我找不到任何研究他们关系的文献。如果能够更有效地学习彼此的观点,那就
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
如果将来您只能使用 Gang of Four book 中定义的一个规范模式。 ,您会选择哪一个?出于什么原因? 最佳答案 不是一种设计模式,但对我来说,这个原则绝对是对我整本书的编程风格影响最大的:
这个问题的答案是community effort .编辑现有答案以改进这篇文章。它目前不接受新的答案或互动。 我正在学习 GoF Java 设计模式,我想看看它们的一些真实例子。 Java 核心库中这
我正在使用kendoTreeList 我正在尝试扩展所有组。这是我的code sample 但似乎 kendoTreeList 仅支持扩展第一组。我也在扩展方法中尝试了以下选择器。 treeList.
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Which are C# native built-in design patterns? Design P
我是一名优秀的程序员,十分优秀!