• 设计模式-工厂模式


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

    第一种:简单工厂模式

    //简单工厂模式,缺点是:加入增加新的核类型时,就需要修改工厂类,这违反了开放封闭原则
    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();}
    };
  • 相关阅读:
    Codeforces Global Round 11
    2018-2019 ICPC, Asia Najing
    Codeforces Round #675 (Div. 2) ABCDE
    AtCoder Regular Contest 104 D(卡常)
    Navigator History Location
    键盘移动div
    键盘事件
    事件的传播
    事件的绑定
    事件的委派
  • 原文地址:https://www.cnblogs.com/wft1990/p/7528922.html
Copyright © 2020-2023  润新知