zoukankan      html  css  js  c++  java
  • 设计模式:工厂方法模式

    抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合。

    设计原则:遵循单一职责、依赖倒置、开闭原则
    常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类
    变化点:工厂与产品的种类
    选择关键点:产品族是否需要一起提供,且是否有一致的接口

    假如我们需要各种水果(如apple),那么做法是:

    1.首先需要一个苹果工厂类,从抽象工厂类继承;

    2.来一个苹果,苹果工厂只能生产苹果(苹果工厂的生产器只能生产苹果)。

    抽象工厂模式结构图:

    实现代码:

     1 #include<iostream>
     2 //工厂方法模式
     3 using namespace std;
     4 class Fruit {
     5 public:
     6     virtual void getName() = 0;
     7 };
     8 
     9 class Apple :public Fruit {
    10     virtual void getName(){
    11         cout << "I'am apple." << endl;
    12     }
    13 };
    14 
    15 class Banana :public Fruit {
    16     virtual void getName() {
    17         cout << "Banana." << endl;
    18     }
    19 };
    20 
    21 class AbstractFactory {
    22 public:
    23     virtual Fruit* CreateFruit() = 0;
    24 };
    25 
    26 class AppleFactory :public AbstractFactory {
    27 public:
    28     virtual Fruit* CreateFruit() {
    29         return new Apple;
    30     }
    31 };
    32 
    33 class BananaFactory :public AbstractFactory {
    34 public:
    35     virtual Fruit* CreateFruit() {
    36         return new Banana;
    37     }
    38 };
    39 
    40 int main(void)
    41 {    
    42     AbstractFactory* af = new AppleFactory;
    43     Fruit * apple = af->CreateFruit();
    44     apple->getName();
    45     delete af;
    46     delete apple;
    47 
    48     AbstractFactory* bf = new BananaFactory;
    49     Fruit * banana = bf->CreateFruit();
    50     banana->getName();
    51     delete bf;
    52     delete banana;
    53 
    54     return 0;
    55 }

     测试结果:

  • 相关阅读:
    继承LIst 的类JSON序列化,无法序列化属性的问题
    C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型
    12.Java web--过滤器与监听器
    11.Java web—servlet
    10.Java web—JavaBean
    9.Java web—JSP内置对象
    8.Java web—JSP基本语法
    Ubuntu 插入鼠标自动禁用触控板
    Ubuntu安装VLC播放器
    Ubuntu快捷键
  • 原文地址:https://www.cnblogs.com/Burgess-Fan/p/6752045.html
Copyright © 2011-2022 走看看