- 设计模式简介
设计模式为开发人员提供一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特征:封装、继承、多态等。
常见的设计模式主要有:工厂模式、策略模式、适配器模式、单例模式、原型模式、模板方法模式、建造者模式、外观模式、组合模式、代理模式、享元模式、桥接模式、修饰模式、备忘录模式、中介者模式、职责链模式、观察者模式、状态模式。
下面我们来粗略的介绍下C++设计模式之工厂模式 - 工厂模式
工厂模式是指:定义一个接口来创建一个对象,但是由子类来决定要实例化哪一个对象。下面我从摘抄的例子来引入:
//首先定义产品类及其子类
class VideoWiring
{
public:
virtual string PlayVideo()=0;
}
class VCD: public VideoWiring
{
public:
string PlayVideo()
{
return "正在播放播放VCD";
}
}
class DVD: public VideoWiring
{
public:
string PlayVideo()
{
return "正在播放播放DVD";
}
}
//简单工厂
class Create
{
public:
static VideoWiring* factory(string VideoName)
{
switch(VideoName)
{
case "DVD":
return new DVD();
case "VCD":
return new VCD();
}
return null;
}
}
client端代码:
void PlayVideo()
{
VideoWiring *vw=Create.factory("DVD");
vw->PlayVideo();
delete vw;
vw=Create.factory("VCD");
vw->PlayVideo();
delete vw;
}
其利用了多态性不管什么具体产品都返回一个抽象;利用分装性,内部产品发生变化时外部使用者不会受到影响;但是上述如果增加了新的产品则不利于开闭原则(对扩展开放,对更改封闭)
//工厂方法:
class Create
{
public:
virtual VideoWiring* factory()=0;
}
class DVDCreate: public Create
{
VideoWiring* factory()
{
return new DVD();
}
}
class VCDCreate: public Create
{
VideoWiring* factory()
{
return new VCD();
}
}
client端代码:
void PlayVideo()
{
VideoWiring *dvd,*vcd;
Create *dvdCreate,*vcdCreate;
dvdCreate=new DVDCreate();
dvd=dvdCreate->factory();
dvd->PlayVideo();
delete dvd;
vcdCreate=new VCDCreate();
vcd=vcdCreate->factory();
vcd->PlayVideo();
delete vcd;
}
综上所述:工厂模式是一种定义一个接口来创建一个对象,但是由子类来决定要实例化哪一个对象。将实际创建工作延迟到子类中,满足面向对象设计的开闭原则(对扩展开放,对更改封闭)。