zoukankan      html  css  js  c++  java
  • 设计模式-工厂模式

    工厂模式分为三类:简单工厂模式、工厂方法模式、抽象工厂模式;

    第一种:简单工厂模式

    //简单工厂模式,缺点是:加入增加新的核类型时,就需要修改工厂类,这违反了开放封闭原则
    enum CTYPE {COREA,COREB};
    class singleCore
    {
    public:
        virtual viod show()=0;
    };
    class singleCoreA:public singleCore
    {
    public:
        void show(){cout<<"singleCoreA"}
    };
    class singleCoreB:public singleCore
    {
    public:
        void show(){cout<<"singleCoreB"}
    };
    class Factory
    {
    public:
        singleCore*createSingleCore(enum CTYPE ctype)
        {
            if(ctype==COREA)
                return new singleCoreA();
            else if(ctype==COREB)
                return new singleCoreB();
            else
                return NULL;
        }
    };

    第二类:工厂方法模式

    所谓工厂方法模式:是指定义了一个用于创建对象的接口,让子类决定实例化那个类。Factory Method 使一个类的实例化延迟到其子类。工厂方法也有缺点:就需要增加一个对象的工厂,如果这家公司发展迅速,推出很多新的处理器核,那么就要开设相应的新工厂,就要定义一个个的工厂类。

    enum CTYPE {COREA,COREB};
    class singleCore
    {
    public:
        virtual viod show()=0;
    };
    class singleCoreA:public singleCore
    {
    public:
        void show(){cout<<"singleCoreA"}
    };
    class singleCoreB:public singleCore
    {
    public:
        void show(){cout<<"singleCoreB"}
    };
    class Factory
    {
    public:
        virtual singleCore*createSingleCore()=0;
    };
    class FactoryA{
    public:
        singleCoreA*createSingleCore(){return new singleCoreA();}
    };
    classs FactoryB{
    public:
        singleCoreB*createSingleCore(){return new singleCoreB();}
    };

    第三类:抽象工厂模式
    举个例子,这家公司的技术不断进步,不仅可以生产单核处理器,也能生产多核处理器,之前的工厂模式和工厂方法模式无法解决,抽象模式可以解决,它的定义为提供了一个创建一系列相关或相互一栏对象的接口,而无需指定它们具体的类。具体的应用是:这家公司还是开设两个工厂,一个专门用来生产A型号的单核多核处理器,而另一个工厂专门用来生产B型号的单核多核处理器。

    enum CTYPE {COREA,COREB};
    class singleCore
    {
    public:
        virtual viod show()=0;
    };
    class singleCoreA:public singleCore
    {
    public:
        void show(){cout<<"singleCoreA";}
    };
    class singleCoreB:public singleCore
    {
    public:
        void show(){cout<<"singleCoreB";}
    };
    class MultiCore
    {
    public:
        virtual viod show()=0;
    };
    class multiCoreA:public MultiCore
    {
    public:
        void show(){cout<<"MultiCoreA";}
    };
    class multiCoreB:public MultiCore
    {
    public:
        void show(){cout<<"MultiCoreB";}
    };
    class Factory
    {
    public:
        virtual singleCore*createSingleCore()=0;
        virtual MultiCore*createMultiCore()=0;
    };
    class FactoryA{
    public:
        singleCoreA*createSingleCore(){return new singleCoreA();}
        multiCoreA *createMultiCore(){return new multiCoreA();}
    };
    classs FactoryB{
    public:
        singleCoreB*createSingleCore(){return new singleCoreB();}
        multiCoreB *createMultiCore(){return new multiCoreB();}
    };
  • 相关阅读:
    Oracle Autonomous Health Framework(AHF)
    Autonomous Health Framework(AHF)相关操作
    Postgresql 正则表达式
    如何去官网下载JDK (JDK8 JDK1.8)
    配置免安装版Oracle客户端
    子用户角色权限菜单 浅谈:子账户设计方案
    EF Power Tools Beta 2 生成 Entity Framework Code First 提示 参数错误 hresult e_invalidarg
    mvc 截取上传图片做头像,自动生成不同小尺寸缩略图
    亚马逊的下拉菜单插件 jQueryMenuAim 使用
    apacheab并发负载压力测试
  • 原文地址:https://www.cnblogs.com/wft1990/p/7528922.html
Copyright © 2011-2022 走看看