工厂模式:
工厂基类下的子类对应分别返回对象类的子工厂,调用者内有一个工厂基类指针,
例:A类中有一个工厂基类指针 BaseFoctorio * foctorio;
这个指针指向一个工厂子类的创建函数,得到一个工厂子类创建的对象,
//抽象文件对象
class FileObject{
public:
FileObject(){};
virtual ~FileObject(){};
virtual void operatorA ()=0;
};
//实体文件对象
class BinaryObject: public FileObject{
public:
BinaryObject(){};
virtual ~BinaryObject(){};
virtual void operatorA (){
cout << "Created BinaryObject ..." <<endl;
}
};
//抽象工厂
class ObjectFactory{
public:
ObjectFactory(){};
virtual ~ObjectFactory(){};
virtual FileObject * CreatFileObject()=0;
};
//实体对象对应工厂
class BinaryFactory : public ObjectFactory{
public:
BinaryFactory(){};
virtual ~BinaryFactory(){};
virtual FileObject * CreatFileObject(){return new BinaryObject;}
};
class LibraryA{
public:
LibraryA(){factory = NULL;};
LibraryA(ObjectFactory* param_factory){this->factory = param_factory; };
virtual ~LibraryA(){ delete factory;};
public:
ObjectFactory * factory;
public:
virtual void operatorB (){
FileObject *ptrf = factory->CreatFileObject();
ptrf->operatorA();
ptrf = NULL;
}
};
void Test2()
{
BinaryFactory* factory = new BinaryFactory ;
/* 这一部分是稳定的结构 */
LibraryA *lb = new LibraryA(factory);
lb->operatorB();
delete lb;
/* */
delete factory;
}
模板模式:
就是一个类中分别有1-5个步骤,基中,1-2-3-4-5为函数,再另加一个run函数,这个run函数按顺序调用1-2-3-4-5函数,完成整个功能循环,但其中的3或4函数的参数可以是外部的参数,判断真假值以选择执行分支,以让run函数运行时达到自身的稳定。
策略模式:
一般做分别计算功能。比如一个A类中实现不同的计算,某变量的值调用一个Strategy策略类成员变量指针的成员函数,Strategy策略类的子类都继承一个成员函数,其函数有一个参数,这个参数是A类(Context* context) 传递进去的,以分别实现不同的计算功能。利用Strategy类的虚函数表来实现调用不同Strategy策略类的子类,以实现低耦合。都是利用了虚函数表的特性来实现的。
A类中的变量Value= new Strategy策略类子类->成员函数(Context* context) ;
观察者模式:
一般做订阅通知类型的功能。比如一个A类中的功能实现中有一个工作进度派发给其它类,其实现原理是这个A类要附带一个观察者Observer类的列表,列表具有添加和移除功能。观察者Observer类的子类都继承一个成员函数,其函数有一个参数,这个参数就是传递的工作进度值,以分别通知实现不同的观察者功能。
桥模式:
一般作扩展功能用。比如一个形状类A下有三角形,矩形,圆形子类,在形态类A下增加一个颜色成员类B,颜色成员类B下再继承红色、蓝色、黄色等子类,进行运行时装配,
Shape* sh = new Rectangle(new BullColor);