??xml version="1.0" encoding="utf-8" standalone="yes"?>
ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "__DynaCastDesc_si_public": first non-inline virtual function in "__Dy
naCastDesc_si_public" is not defined.
ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "eti_cplusplus": first non-inline virtual function in "eti_cplusplus"
is not defined.
请问Q如何解冻I
]]>
]]>
]]>
单说是嫁接。从cdơ图的设计原则来_(d)是该干什么的p它干什么,需要协作时Q组合它们?/span>
class
Shape { //
一个接?/span>
virtual void BoundBox() const = 0;
virtual ~Shape() {};
};
/*
*
一个抽象类Q作?/span>
TextShape
?/span>
Helper
Q对
TextShape
表示的文本进行文
*
本化~辑
*/
class
TextView {
};
class
TextShapeAdapter : public Shape, protected TextView { //
一?/span>
Adapter
};
class
TextShapeAdaptee : public Shape { //
一?/span>
Adaptee
protected
:
TextView _helper;
};
Singleton
范式唯一需要注意的是它范围。这个范围根据需要来指定Q如Q?/span>
n
一个进E的地址I间内的唯一实例Q?/span>
n
一个物理机器内Q?/span>
n
一个虚拟机的地址I间内;
n
一个局域网内;
n
{等?/span>
如果你是在一个库中实玎ͼq且在多用户
-
多进E环境下q行Q同步控制也应该在设计时p虑好?/span>
创徏型设计范式一句话描述
Q?/span>
Abstract Factory
——你要什么标准就实现什么标准,谁叫客户是上帝呢Q?/span>
Builder
——装配和集成或从一UŞ式到另一UŞ式的转化Q?/span>
Factory Method
——挑自己qQ或只选对的,不选贵的;
Prototype
——自我复Ӟ
Singleton
——天下无双;
Prototype
范式是一个运行时实例的自我复Ӟ卌个实例把自己作ؓ(f)它所代表的这个类型的工厂。有点像《西游记》中的孙(zhn)空以自׃ؓ(f)原型Q用自己的猴毛变成自׃栗?/span>
有这L(fng)能力需要具备的条g是:(x)
1?/font>
提供一个该cd的实例作为原型,比如矛_里蹦Z(jin)孙?zhn)IZP
2?/font>
q个实例必须h自我复制能力Q比如孙(zhn)空从他师傅那获得神技Q?/span>
实现q个范式的基是在一个需要自我复制的实例中添加一个接口:(x)
class Prototype
{
public:
virtual Prototype clone()
{
//
Ҏ(gu)自己的需要实?/span>
};
};
原文
Intent
部分
Q?/span>
?/span>
This creates a dilemma: The framework must instantiate classes, but it only knows about abstract classes, which it cannot instantiate.
?/span>
1?/span>
Application
使用
Factory Method
?/span>
Framework
隐藏?/span>
Document
的实现细节;
class Document
{
virtual void open() = 0;
virtual void close() = 0;
};
class Factory
{
public:
//
一个虚函数Q被子类实现以便军_真实?/span>
Document
cdQ?/span>
virtual Document createDocument() { return 0;};
};
class Application : public Factory
{
?o:p>
};
class Framework
{
private:
Application _application;
Document _document;
?o:p>
};
2?/font>
提供
hook
Hook
是用来挂东西的。这个被挂的东西要求?/span>
Hook
的定义具有相同的原型。在
C
中,它被一个函数指针定义;?/span>
C++
中,׃
overriding
的提供,它可以被虚函C?qing)纯虚函数定义?/span>
Builder
范式是一?/span>
Object Creational
范式?br />
Builder
范式主要用于装配Q?/span>
Assembly
Q和集成Q?/span>
Integration
Q。一是ؓ(f)相同内容创徏不同的展玎ͼ二是使用不同的部分进行组合,产生一U新的对象类型?/span>
原文
Intent
部分
Q?/span>
?/span>
... create different representations
.
?/span>
可以理解为把相同的内容经q?/span>
Builder
处理后,创徏新的或{换成不同的Ş状。这可以惛_~译器、文的格式转换器等{的实现和用途?/span>
Builder
范式要求从物理上隔离使用者和转换器对象?/span>
转换器用者根据自q需要要求{换器对它选定的内容进行规定的转换Q但它ƈ不知道{换器如何转换Q而{换器在接收到使用者传递的内容后,按照使用者的要求启动转换q程?/span>
1?/span>
作ؓ(f)一?/span>
Singleton
实现Q?/span>
q种方式的说明将在说?/span>
Singleton
范式补充?/span>
2?/span>
创徏pd产品Q?/span>
在这U方式下又包含两U子方式Q?/span>
a)
使用
Factory Method
范式Q?/span>
单地_(d)使用q种方式的实现就是定义一个接口,针对自己定义的品(
widget
Q集合中每个cd定义一个创建方法,q在其子cM提供实现?/span>
b)
使用
Prototype
范式Q?/span>
原文
Implementation
部分
Q?/span>
?/span>
The concrete factory is initialized with a prototypical instance of each product in the family, and it creates a new product by cloning its prototype
.
?/span>
q句话的意思是_(d)对在同一个品簇的品,当它们的工厂被实例化Ӟ它们同时也被实例化到q个工厂中,q在客户需要其中某个类型的产品实例Ӟ使用
clone
方式创徏一个新的对象给客户?/span>
原本
Implementation
部分
Q?/span>
?/span>
The Prototype-based approach eliminates the need for a new concrete factory class for each new product family
.
”这句话是上句引文的下一句?/span>
我个为,q句话的本意是针?/span>
a
Q方法而言的;但却与它的上一句话怺矛盾。因Z一句说q个Ҏ(gu)是针对?/span>
in the family
”的Q而本句是针对?/span>
a new concrete factory
”和?/span>
new product family
”的。稍微有点英语常识的人都知道Q?/span>
the
”是定冠词,一般用于特指;而?/span>
a
”在q里表示L。因此我认ؓ(f)是说不通的Q换句话_(d)使用Z
Prototype
的实C然不能消除一个具体的工厂针对一个具体品簇的限制。即使可以,一般应用在该品集合包含较?yu)的产品cd时用?/span>
3?/span>
定义可扩展的工厂Q?/span>
q种方式针对自己定义的品(
widget
Q集合不可预知的cd扩展Q提供一U叠加的方式Q以便扩展自q工厂来生产被扩展的品类型?/span>
原文
Intent
部分Q?/span>
?/span>
…without specifying their concrete classes
”,卛_使用q个对象的用P不直接提?/span>
new
操作Q?br />
一个对象的cd支持多种标准Qƈ满用户在多U标准之间自由地从一U标准{换成另外一U标准?/span>
Z(jin)实现q个范式Q需要ؓ(f)要实现?/span>
widget
集合定义一个ȝ工厂抽象c,卻I(x)
AbstractFactory
Q同时在q个工厂cM为每?/span>
widget
定义一个类g
CreateXXX
Q?/span>
Create
表示要执行的zdQ?/span>
XXX
表示被创建的
widget
的类型名Uͼ(j)的方法;q对要实现的
widget
集合中的每个
widget
定义一个抽象类?/span>
原文
Motivation
部分Q?/span>
?/span>
There’s also an abstract class for each kind of widget, and concrete subclasses implement widgets for specific look-and-feel standards.
?/span>

׃对实现每个标准下?/span>widgetcd集合需要提供相应的WidgetFactory的实玎ͼ因此用户需要实例化每个标准下的工厂实现?br />
册个问题,?/span>Java中存在典型的实现方式。就是定义上囄上一部分Q然后自己实C个作为默认的Q然后,在某个地方实C个静(rn)态的Ҏ(gu)Q以实例化真实的WidgetFactoryQ接下来l应用开发h员提供一个标准的pȝ属性,比如-Djava.widget.factory=Q这样可实现灉|的撤换?/span>