zoukankan      html  css  js  c++  java
  • 工厂方法模式之C++实现

    说明:本文仅供学习交流,转载请标明出处。欢迎转载。

           工厂方法模式简单工厂模式的差别在于:在简单工厂模式中。全部的产品都是有一个工厂创造,这样使得工厂承担了太大的造产品的压力,工厂内部必须考虑所以的产品被造的可能。所以工厂里面会内置switch...case语句来自适应地依据用户的输入自适应地产生产品,同一时候简单工厂模式另一个缺点就是当用户新增了一个产品类时,须要去工厂里面去改动switch...case语句,这样就明显地违背了“开放-封闭原则”。而工厂方法模式则克服了这个缺点,该模式对工厂做了进一步的抽象,而继承出更专一的工厂,每一个详细的工厂只制造一类产品,这样分工明白,工厂的压力也就不会那么大。

            工厂方法模式例如以下图所看到的:


             以下给出C++的一种工厂方法模式的举例:

              

    #include<iostream>
    using namespace std;
    class Base//抽象产品类
    {
    public:
    	virtual void print()=0;
    };
    class B1:public Base//详细产品类B1
    {
    public:
    	void print(){cout<<"This is B1::print"<<endl;}
    };
    
    class B2:public Base//详细产品类B2
    {
    public:
    	void print(){cout<<"This is B2::print"<<endl;}
    };
    
    class Factory//抽象工厂类
    {
    public:
    	virtual Base* getInstance()=0;
    };
    
    class Factory_B1:public Factory//详细工厂类Factory_B1
    {
    public:
    	Base* getInstance(){return new B1;}
    };
    
    class Factory_B2:public Factory//详细工厂类Facotry_B2
    {
    public:
    	Base* getInstance(){return new B2;}
    };
    int main()
    {
    	/****測试产品B1*******/
    	Factory &pf=Factory_B1();
    	Base *pb=pf.getInstance();//工厂B1产生B1实例
    	pb->print();
    	delete pb;//释放堆空间
    
    	/****測试产品B2*****/
    	pb=Factory_B2().getInstance();
    	pb->print();
    	delete pb;
    	return 0;
    }
    上述程序測试结果例如以下:


    參考资料:

    [1]《大话设计模式》

    [2]《设计模式之禅》

    [3]《HeadFirst设计模式》

  • 相关阅读:
    javaweb中带标签体的自定义标签
    javaweb带父标签的自定义标签
    Filter的常见应用
    Filter内容
    JFace TableViewer性能改善 -- 使用VirtualTable
    SWT table性能改善 -- 使用VirtualTable
    java自动探测文件的字符编码
    [小技巧]Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法
    批量导出VBA工程中的Source
    开源许可证知多少
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7231081.html
Copyright © 2011-2022 走看看