• 设计模式-1.1工厂模式


    工厂模式分为三种:1)简单工厂模式;2)工厂方法模式;3)抽象工厂模式;

    1.1.1 简单工厂模式

    简单工厂模式:需要在工厂类中做判断,从而创造相应产品。一个工厂对应多个产品,需要一个工厂类和多个产品类,一个产品对应一个类,当新增产品时,需要新增产品类和修改工厂类,这样违背了软件设计原则,开放封闭原则:软件实体(类、模块、函数)可以扩展,但不可以修改。

     1 enum CTYPE {COREA, COREB};   
     2 class SingleCore  
     3 {  
     4 public:  
     5     virtual void Show() = 0;
     6 };  
     7 //单核A  
     8 class SingleCoreA: public SingleCore  
     9 {  
    10 public:  
    11     void Show() { cout<<"SingleCore A"<<endl; }  
    12 };  
    13 //单核B  
    14 class SingleCoreB: public SingleCore  
    15 {  
    16 public:  
    17     void Show() { cout<<"SingleCore B"<<endl; }  
    18 };  
    19 //唯一的工厂,可以生产两种型号的处理器核,在内部判断  
    20 class Factory  
    21 {  
    22 public:   
    23     SingleCore* CreateSingleCore(enum CTYPE ctype)  
    24     {  
    25         if(ctype == COREA) //工厂内部判断  
    26             return new SingleCoreA(); //生产核A  
    27         else if(ctype == COREB)  
    28             return new SingleCoreB(); //生产核B  
    29         else  
    30             return NULL;  
    31     }  
    32 }; 

    1.1.2 工厂方法模式

    工厂方法模式:Factory Method,创建一个定义对象的接口,让子类去决定实例化哪个类,使一个类的实例化延迟到其子类。一个工厂专门负责一个产品。每增加一个新的产品,需要增加一个产品类和一个工厂类,这样不违背开放封闭原则,但当产品更新换代比较快时,都需要增加相应的工厂类,扩展性减弱。

     1 class SingleCore  
     2 {  
     3 public:  
     4     virtual void Show() = 0;
     5 };  
     6 //单核A  
     7 class SingleCoreA: public SingleCore  
     8 {  
     9 public:  
    10     void Show() { cout<<"SingleCore A"<<endl; }  
    11 };  
    12 //单核B  
    13 class SingleCoreB: public SingleCore  
    14 {  
    15 public:  
    16     void Show() { cout<<"SingleCore B"<<endl; }  
    17 };  
    18 class Factory  
    19 {  
    20 public:  
    21     virtual SingleCore* CreateSingleCore() = 0;
    22 };  
    23 //生产A核的工厂  
    24 class FactoryA: public Factory  
    25 {  
    26 public:  
    27     SingleCoreA* CreateSingleCore() { return new SingleCoreA; }  
    28 };  
    29 //生产B核的工厂  
    30 class FactoryB: public Factory  
    31 {  
    32 public:  
    33     SingleCoreB* CreateSingleCore() { return new SingleCoreB; }  
    34 };


    1.1.3 抽象工厂模式

    抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。

     1 //单核  
     2 class SingleCore   
     3 {  
     4 public:  
     5     virtual void Show() = 0;
     6 };  
     7 class SingleCoreA: public SingleCore    
     8 {  
     9 public:  
    10     void Show() { cout<<"Single Core A"<<endl; }  
    11 };  
    12 class SingleCoreB :public SingleCore  
    13 {  
    14 public:  
    15     void Show() { cout<<"Single Core B"<<endl; }  
    16 };  
    17 //多核  
    18 class MultiCore    
    19 {  
    20 public:  
    21     virtual void Show() = 0;
    22 };  
    23 class MultiCoreA : public MultiCore    
    24 {  
    25 public:  
    26     void Show() { cout<<"Multi Core A"<<endl; }  
    27   
    28 };  
    29 class MultiCoreB : public MultiCore    
    30 {  
    31 public:  
    32     void Show() { cout<<"Multi Core B"<<endl; }  
    33 };  
    34 //工厂  
    35 class CoreFactory    
    36 {  
    37 public:  
    38     virtual SingleCore* CreateSingleCore() = 0;
    39     virtual MultiCore* CreateMultiCore() = 0;
    40 };  
    41 //工厂A,专门用来生产A型号的处理器  
    42 class FactoryA :public CoreFactory  
    43 {  
    44 public:  
    45     SingleCore* CreateSingleCore() { return new SingleCoreA(); }  
    46     MultiCore* CreateMultiCore() { return new MultiCoreA(); }  
    47 };  
    48 //工厂B,专门用来生产B型号的处理器  
    49 class FactoryB : public CoreFactory  
    50 {  
    51 public:  
    52     SingleCore* CreateSingleCore() { return new SingleCoreB(); }  
    53     MultiCore* CreateMultiCore() { return new MultiCoreB(); }  
    54 }; 


    参考出处:http://blog.csdn.net/wuzhekai1985/article/details/6660462

  • 相关阅读:
    IDEA中Spring Boot项目MyBaits提示Invalid bound statement (not found)错误
    js 算法 两个数组比较去重,性能优化
    window.open() 打开新标签,之前的sessionStorage还在
    自定义<el-table-column> 数据格式:数组对象,且每条对象中有一个数组对象
    VSCode 代码格式化 快捷键
    echarts的饼图label标签重叠解决办法
    vue打包 element-icons.woff 和element-icons.ttf 字体文件路径错误,导致icon图标显示成小方块的问题。
    vue中的$refs属性几个注意点
    js中的 || 与 && 运算符详解
    package.json与package-lock.json文件是干什么用的?
  • 原文地址:https://www.cnblogs.com/ZhouYong-Travel/p/4007955.html
Copyright © 2020-2023  润新知