zoukankan      html  css  js  c++  java
  • 设计模式学习Factory Method(工厂方法)

    意图:定义一个用于创建对象的接口,让子类决定实例化哪个类

    适用性:

    当一个类不知道它所必须创建的类的对象时

    当一个类希望由它的子类来制定它所创建的对象的时候

    当类将创建对象的职责委托给多个帮助子类的一个是,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

    示例图:

    image

    示例代码:

    //工厂根据产品id生产产品
    class CFactory
    {
    public:
        CFactory(void);
    public:
        ~CFactory(void);
        public:
        static CProduct* Create(int id)
        {
            if(id ==0)
            {
            return new CPen();
            }       
        }
    };
    //通过模板方法生产产品
    template <class CProduct>
    class CTemplateFactory:public CCreator
    {
    public:
        virtual CProduct* CreatorProduct()
        {
            return new CProduct();
        }
    };

    //抽象类不负责具体产品生产
    class CCreator
    {
    public:
        CCreator(void);
    public:
        ~CCreator(void);
        public:
        virtual CProduct* CreatorProduct()=0;
    };
    //具体创建类负责生产具体产品
    class CPenCrator:public CCreator
    {
    public:
        CPenCrator():CCreator()
        {
       
        }
        ~CPenCrator()
        {
       
        }
        public:
        virtual CProduct* CreatorProduct()
        {
            return new CPen();
        }
    };

    class CProduct
    {
    public:
        CProduct(void);
    public:
        ~CProduct(void);
    public:
        virtual void Display()=0;
    };

    class CPen:public CProduct
    {
    public:
        CPen():CProduct()
        {

        }
        ~CPen()
        {

        }
        public:
        virtual void Display()
        {
        _tprintf(_T("This an Pen/n"));
        }
    };

  • 相关阅读:
    SecureCRT的设置和美化
    strtod-strtod, 字符串 转 数字 函数
    Debug : array type has incomplete element type
    Linux上Core Dump文件的形成和分析
    centos7,进程最大打开文件数 too many open files错误
    不使用临时变量交换两个值
    C语言的设计理念
    K&R C vs ANSI C(数据类型提升)
    再也不怕C语言的声明了
    K&R C vs ANSI C(数据类型转换)
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340731.html
Copyright © 2011-2022 走看看