关于设计模式
整理中--
创建型:builder 模式:http://ldjsyl.iteye.com/blog/190388 ,关于工厂模式和抽象工厂模式:
结构型:Facade 模式:为子系统中的一组接口提供一个统一的接口。Fadecade模式定义了一个更高层的接口,使子系统更加容易的使用。即 希望简化原有的系统的使用方式,定义一组新的接口给子系统来使用,简化接口的作用。通常来讲,Facade对象通常属于singleton模式。
Adapter模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类能够一起工作。Adaptet实际上就是一种封装。两种变体:对象的Adapter模式和类的Adapter模式。 1)对象的Adapter模式是封装的那个类中包含某特定类的对象,封装方法中实际上调用的是这个特定类对象的方法。2)类的Adapter模式是创建一个新类,这个类从两个类上继承:从定义其接口的抽象类公有继承,从访问其实现的原有类私有继承,这样每个被封装的方法都调用其对应的私有继承的方法。
Facade 和 Adapter区别:Facade简化了接口,而Adapter将一个已有的接口转换成另一个接口。
Decorator模式:动态的给一个对象添加一些额外的职责。就增加功能来说,Decorator模式比生成子类更灵活。
class Component
{
public:
virtual void prtTicket()=0{};//定义为一个抽象接口
};
class CTicket:public Component
{
public:
void prtTicket()
{
printf("Ticket \n");
}
};
class CTicketDecortor:public Component
{
private:
Component* m_com;
public:
CTicketDecortor(Component* com):m_com(com){}
void callPrt()
{
if (m_com!=NULL)
m_com->prtTicket();
}
};
class CHead1:public CTicketDecortor
{
public:
CHead1(Component* com):CTicketDecortor(com){}
void prtTicket()
{
printf("Head \n");
callPrt();
}
};
class CFoot1:public CTicketDecortor
{
public:
CFoot1(Component* com):CTicketDecortor(com){}
void prtTicket()
{
printf("Foot \n");
callPrt();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Component* ptr_instance=new CFoot1(new CHead1(new CTicket()));
ptr_instance->prtTicket();
return 0;
}
Bridge模式:将一组实现与另一组使用它们的对象分离。将抽象与其实现解耦,使它们都可以独立的变换。典型的体现出了设计模式中--找出变换封装之和优先使用对象聚集而不是类继承--的思想。 对象要对自己负责,抽象接口,通过抽象类进行封装,一条规则实现一次,可测试性。
行为型:
Strategy模式:定义一系列的算法,把它们一个个的封装起来,并且使他们可以相互的替换。本模式可以使算法可以独立与使用它们的客户独立存在。strategy模式和bridge模式很相似,而且把他们归为了不同的类型,区别除了在应用情景的上下文中有所不同之外,其他的区别还没有想清楚。
针对接口进行编程,而不针对实现编程。优先考虑对象组合而不是类继承。针对变化进行封装。
Template method 模式:
浙公网安备 33010602011771号