c++设计模式之工厂模式入门篇

  • 设计模式简介
      设计模式为开发人员提供一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特征:封装、继承、多态等。
      常见的设计模式主要有:工厂模式、策略模式、适配器模式、单例模式、原型模式、模板方法模式、建造者模式、外观模式、组合模式、代理模式、享元模式、桥接模式、修饰模式、备忘录模式、中介者模式、职责链模式、观察者模式、状态模式。
      下面我们来粗略的介绍下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;
}

  综上所述:工厂模式是一种定义一个接口来创建一个对象,但是由子类来决定要实例化哪一个对象。将实际创建工作延迟到子类中,满足面向对象设计的开闭原则(对扩展开放,对更改封闭)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值