软件计划模式概念篇

打印 上一主题 下一主题

主题 528|帖子 528|积分 1584

创建型模式

1、创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。
2、为了使软件的布局更加清楚,外界对于这些对象只必要知道它们共同的接口,而不必要清楚其详细的实现细节,使整个体系的计划更加符合单一职责原则。
3、创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个体系独立的目标。
工厂方法模式(Factory Method)

模式动机:

定义一个抽象工厂类,并在详细工厂类里重写这个抽象工厂类中定义的抽象方法。抽象化的结果使这种布局可以在不修改已有详细工厂类的情况下引进新的产品。
模式定义:

1、定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2、在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责天生详细的对象,将类的实例化操作延迟到子类中完成。
3、工厂方法模式属于类创建型模式。
布局


定义抽象产品接口(Product):定义一个抽象产品接口,它声明了产品对象的通用属性和方法。所有详细产品类都必须实现这个接口方法。
创建详细产品类(Concrete Product):实现抽象产品接口的详细产品类。每个详细产品类表现一种详细的产品。
定义抽象工厂接口(Creator):创建一个抽象工厂接口,该接口声明了工厂方法,用于创建产品对象。
创建详细工厂类(Concrete Creator):实现抽象工厂接口的详细工厂类,每个详细工厂类负责创建特定类型的产品。在客户端中使用工厂方法:
代码实现
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. //抽象产品
  5. class Product
  6. {
  7. public:
  8.         virtual void productMethod() = 0;
  9. };
  10. //具体产品1
  11. class ConcreteProduct_Xiaomi : public Product
  12. {
  13.         void productMethod() override
  14.         {
  15.                 cout << "小米手机生产。" << endl;
  16.         }
  17. };
  18. //具体产品2
  19. class ConcreteProduct_Huawei : public Product
  20. {
  21.         void productMethod() override
  22.         {
  23.                 cout << "华为手机生产。" << endl;
  24.         }
  25. };
  26. //抽象工厂
  27. class Creator
  28. {
  29. public:
  30.         virtual Product* factoryMethod() = 0;
  31. };
  32. //具体工厂1
  33. class ConcreteCreator_Xiaomi : public Creator
  34. {
  35. public:
  36.         Product* factoryMethod() override
  37.         {
  38.                 return new ConcreteProduct_Xiaomi();
  39.         }
  40. };
  41. //具体工厂2
  42. class ConcreteCreator_Huawei : public Creator
  43. {
  44. public:
  45.         Product* factoryMethod() override
  46.         {
  47.                 return new ConcreteProduct_Huawei();
  48.         }
  49. };
  50. int main()
  51. {
  52.         //使用具体工厂创建具体产品
  53.         Creator* Xiaomi_Fac = new ConcreteCreator_Xiaomi();
  54.         Product* Xiaomi_pro = Xiaomi_Fac->factoryMethod();
  55.         Xiaomi_pro->productMethod();
  56.         Creator* Huawei_Fac = new ConcreteCreator_Huawei();
  57.         Product* Huawei_pro = Huawei_Fac->factoryMethod();
  58.         Huawei_pro->productMethod();
  59. }
复制代码
应用场景

后续补充
抽象工厂模式(Abstract Factory)

模式动机:

在工厂方法模式中,每个详细工厂对应一种详细产品。偶然,我们必要一个工厂可以提供多个产品对象,而不是单一的产品对象。
抽象工厂模式定义:

1、提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们详细的类。
2、抽象工厂模式属于对象创建型模式
布局:


抽象工厂接口(Abstract Factory): 定义了一组方法,每个方法用于创建某一类对象,通常包括多个产品族的创建方法。
详细工厂类(Concrete Factory): 实现了抽象工厂接口,负责创建详细的产品对象。每个详细工厂类通常对应一个产品族。
抽象产品接口(Abstract Product): 义了一组方法,用于描述产品的通用行为。
详细产品类(Concrete Product): 实现了抽象产品接口,表现真正的产品对象。每个详细产品类属于某个产品族。
代码实现:
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. //抽象手机产品
  5. class aF_ProductPhone
  6. {
  7. public:
  8.         virtual void phoneMethod() = 0;
  9. };
  10. //具体产品-小米手机
  11. class aF_ConcreteProductPhone_Xiaomi : public aF_ProductPhone
  12. {
  13. public:
  14.         void phoneMethod() override
  15.         {
  16.                 cout << "小米手机生产。" << endl;
  17.         }
  18. };
  19. //具体产品-华为手机
  20. class aF_ConcreteProductPhone_Huawei : public aF_ProductPhone
  21. {
  22. public:
  23.         void phoneMethod() override
  24.         {
  25.                 cout << "华为手机生产。" << endl;
  26.         }
  27. };
  28. //抽象电脑产品
  29. class aF_ProductComputer
  30. {
  31. public:
  32.         virtual void computerMethod() = 0;
  33. };
  34. //具体产品-小米电脑
  35. class aF_ConcreteProductComputer_Xiaomi : public aF_ProductComputer
  36. {
  37. public:
  38.         void computerMethod() override
  39.         {
  40.                 cout << "小米电脑生产。" << endl;
  41.         }
  42. };
  43. //具体产品-华为电脑
  44. class aF_ConcreteProductComputer_Huawei : public aF_ProductComputer
  45. {
  46. public:
  47.         void computerMethod() override
  48.         {
  49.                 cout << "华为电脑生产。" << endl;
  50.         }
  51. };
  52. //抽象工厂
  53. class aF_AbstractFactory
  54. {
  55. public:
  56.         virtual aF_ProductPhone* createPhone() = 0;
  57.         virtual aF_ProductComputer* createComputer() = 0;
  58. };
  59. //具体工厂-小米
  60. class aF_XiaomiFactory : public aF_AbstractFactory
  61. {
  62. public:
  63.         aF_ProductPhone* createPhone() override
  64.         {
  65.                 return new aF_ConcreteProductPhone_Xiaomi();
  66.         }
  67.         aF_ProductComputer* createComputer() override
  68.         {
  69.                 return new aF_ConcreteProductComputer_Xiaomi();
  70.         }
  71. };
  72. //具体工厂-华为
  73. class aF_HuaweiFactory : public aF_AbstractFactory
  74. {
  75. public:
  76.         aF_ProductPhone* createPhone() override
  77.         {
  78.                 return new aF_ConcreteProductPhone_Huawei();
  79.         }
  80.         aF_ProductComputer* createComputer() override
  81.         {
  82.                 return new aF_ConcreteProductComputer_Huawei();
  83.         }
  84. };
  85. int main()
  86. {
  87.         //小米工厂
  88.         aF_AbstractFactory* xiaomiFac = new aF_XiaomiFactory();
  89.         aF_ProductPhone* xiaomiPhone = xiaomiFac->createPhone();
  90.         xiaomiPhone->phoneMethod();
  91.         aF_ProductComputer* xiaomiComputer = xiaomiFac->createComputer();
  92.         xiaomiComputer->computerMethod();
  93.         //华为工厂
  94.         aF_AbstractFactory* huaweiFac = new aF_HuaweiFactory();
  95.         aF_ProductPhone* huaweiPhone = huaweiFac->createPhone();
  96.         huaweiPhone->phoneMethod();
  97.         aF_ProductComputer* huaweiComputer = huaweiFac->createComputer();
  98.         huaweiComputer->computerMethod();
  99. }
复制代码
应用场景

后续补充
单例模式(Singleton Pattern)

模式动机:

对于体系中的某些类来说,有且只能有一个实例。
(1)一个体系只能有一个窗口管理器。
(2)体系中可以有很多打印机,但是只能有一个打印机正在工作。
单例模式定义:

1、确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。
2、单例模式属于对象创建型模式。
3、单例负责类的实例的创建,且是唯一的。因此,在单例类的外部无法使用new创建。否则,该类的实例对象就不是单例。
布局:


代码实现:

懒汉式单例模式:
  1. [/code][b]饿汉式单例模式:[/b]
  2. [code]
复制代码
应用场景

后续补充
持续更新中

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表