• 简单工厂模式(Simple Factory Pattern)


    概述:

    1)定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例都具有共同的父类。

    特点:

    1)在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)。

    2)需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程。

    例子:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 //IPhone产品
     5 typedef enum _tagPhoneEnum
     6 {
     7     IPhoneX,
     8     IPhone11,
     9     IPhone7,
    10 }PhoneEnum;
    11 
    12 
    13 //IPhone各个产品手机共有特性
    14 class IPhone
    15 {
    16 public:
    17     virtual int Price() = 0;//价钱
    18 };
    19 
    20 //IPhoneX 手机
    21 class CIPhoneX:public IPhone
    22 {
    23 public:
    24     virtual int Price()
    25     {
    26         return 5000;
    27     }
    28 };
    29 
    30 //IPhone11 手机
    31 class CIPhone11:public IPhone
    32 {
    33 public:
    34     virtual int Price()
    35     {
    36         return 6000;
    37     }
    38 };
    39 
    40 //IPhone手机工厂
    41 class IPhoneFactory
    42 {
    43 public:
    44     IPhone* GetPhone(PhoneEnum type)
    45     {
    46         switch (type)
    47         {
    48         case IPhone11://IPhone11
    49             return new CIPhone11(); 
    50         case IPhoneX://IPhoneX
    51             return new CIPhoneX();
    52         default://无法生产
    53             cout << "不能生产该型号产品!" << endl; 
    54             return NULL;
    55         }
    56     }
    57 };
    58 
    59 
    60 int main(int argc,char **argv)
    61 {
    62     IPhoneFactory* factory = new IPhoneFactory();//IPhone工厂
    63     IPhone* iphone = factory->GetPhone(IPhone11);//生产IPhone11
    64     if (NULL != iphone)
    65     {
    66         cout << iphone->Price() << endl;
    67         delete iphone;
    68     }
    69 
    70     iphone = factory->GetPhone(IPhoneX);//生产IPhone11
    71     if (NULL != iphone)
    72     {
    73         cout << iphone->Price() << endl;
    74         delete iphone;
    75     }
    76 
    77     iphone = factory->GetPhone(IPhone7);//生产IPhone7
    78     if (NULL != iphone)
    79     {
    80         cout << iphone->Price() << endl;
    81         delete iphone;
    82     }
    83     
    84     return 0;
    85 }

    通过以上例子我们可以看到简单工厂模式有以下优缺点:

    优点:

    1)工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责。

    2)客户端无需知道所创建具体产品的类名,只需知道参数即可。

    3)也可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类。

    缺点:

    1)工厂类集中了所有产品的创建逻辑,职责过重,一旦异常,整个系统将受影响。

    2)使用简单工厂模式会增加系统中类的个数(引入新的工厂类),增加系统的复杂度和理解难度。

    3)系统扩展困难,一旦增加新产品不得不修改工厂逻辑,在产品类型较多时,可能造成逻辑过于复杂。

    4)违反开放-封闭原则(Open Closed Principle:对于扩展是开放的,对于修改是封闭的)。

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    It's Android Time:程序员创富有道
    《linux核心应用命令速查》连载十五:chkconfig:设置系统的各种服务
    IBM资深副总裁 推荐《营销2.0最佳实践:网络营销时代的ANGELS制胜法则》
    《linux核心应用命令速查》连载十二:top:显示进程
    《linux核心应用命令速查》连载九:crontab:设置计时器
    软件测试管理是什么?
    Sandy Carter,IBM副总裁 推荐《营销2.0最佳实践:网络营销时代的ANGELS制胜法则》
    BizTalk Server 2010 使用 WCF Service [ 下篇 ]
    BizTalk请求JAVA的Web Service报错
    ExtJS 4.0 beta 3的更新说明
  • 原文地址:https://www.cnblogs.com/kuaixue/p/12778599.html
Copyright © 2020-2023  润新知