美文网首页
2.工厂模式

2.工厂模式

作者: celusing | 来源:发表于2020-11-24 11:03 被阅读0次

https://www.cnblogs.com/cxjchen/p/3143633.html

背景:假如不使用工厂模式,只用AbstractProduct和它的子类,当客户端每次使用子类的时候,都需要知道到底使用的是哪一个子类。当子类比较多的时候管理起来比较麻烦。

1.简单工厂

深度截图_选择区域_20201120135625.png

简单来说:简单工厂,只有一个简单工厂类,工厂类中创建产品的方法,根据传入产品的type,来创建不同的产品。
客户端:看到的是产品的抽象,无需关心返回的到底是哪个子类。客户端唯一需要知道的子类:是工厂的子类。使用的时候也是使用工厂的抽象类,达到了依赖转置的效果。
缺点:

  • 每添加一个产品子类,都需要在工厂实现类,创建产品的方法中增加一个分支,违背了开放-封闭原则;
  • 要求产品有相同的方法名。
 1 #include "SimpleFactory.h"
 2 
 3 
 4 int main(){
 5     AbstractFactory* factory = new SimpleFactory();
 6     AbstractProduct* product = factory->createProduct(1);
 7     product->operation();
 8     delete product;
 9     product = NULL;
10     
11     product = factory->createProduct(2);
12     product->operation();
13     delete product;
14     product = NULL;
15     return 0;
16 }

2.工厂模式(多工厂模式)

目的:解决简单工厂存在的违反开放-闭合原则的问题。

深度截图_选择区域_20201120142428.png

简单来说:每个产品提供一个对应的工厂类,通过创建不同工厂来创建不同的产品。每次添加产品的时候,只需要添加一个工厂之类就可以了。完美遵循了开放-闭合原则。

 1 #include "AbstractFactory.h"
 2 
 3 
 4 int main(){
 5     AbstractFactory* factory = new FactoryA();
 6     AbstractProduct* product = factory->createProduct();
 7     product->operation();
 8     delete product;
 9     product = NULL;
10     delete factory;
11     factory = NULL;
12     
13     factory = new FactoryB();
14     product = factory->createProduct();
15     product->operation();
16     delete product;
17     product = NULL;
18     delete factory;
19     factory = NULL;
20     return 0;
21 }

3.抽象工厂

简单工厂模式和工厂模式的缺点:产品子类必须是同一类性的,拥有共同的方法。限制了子类的扩展。
为了更好的扩展,抽象工厂就将同一类产品的子类归为一类,让他们继承同一个抽象子类。


深度截图_选择区域_20201120143921.png

简单来说:多个工厂,每一个工厂子类负责产生一簇产品,而子类的方法产生一种类型的产品。
客户端:需要知道使用哪一个工厂,并且该工厂对应可以生产的产品簇。

 1 #include "AbstractFactory.h"
 2 
 3 
 4 int main(){
 5 
 6     AbstractFactory* factory = new Factory1();
 7     AbstractProductA* productA = factory->createProductA();
 8     AbstractProductB* productB = factory->createProductB();
 9     productA->operationA();
10     productB->operationB();
11     
12     delete factory;
13     factory = NULL;
14     delete productA;
15     productA = NULL;
16     delete productB;
17     productB = NULL;
18     
19     factory = new Factory2();
20     productA = factory->createProductA();
21     productB = factory->createProductB();
22     productA->operationA();
23     productB->operationB();
24     
25     delete factory;
26     factory = NULL;
27     delete productA;
28     productA = NULL;
29     delete productB;
30     productB = NULL;
31     return 0;
32 }

相关文章

  • php设计模式之工厂模式

    1. 工厂模式分类 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式; 2. 简单工厂模式 又...

  • 设计模式之工厂模式

    1.简单工厂模式 2.抽象工厂模式

  • Java中的工厂模式

    1.简单工厂模式 2.常规工厂模式

  • 2.工厂模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,...

  • 2.工厂模式

    https://www.cnblogs.com/cxjchen/p/3143633.html[https://ww...

  • 设计模式之工厂模式

    文章结构1.工厂模式的分类2.参考文章与书籍 1.工厂模式的分类 工厂模式分为简单工厂模式、工厂方法、抽象工厂三种...

  • 【重温设计模式】工厂设计模式

    一.介绍 工厂设计模式的分类 1.简单工厂模式2.工厂方法模式3.抽象工厂模式 工厂设计模式在工作中的应用 1.s...

  • 工厂模式

    本章内容 1. 简单工厂模式(也叫静态工厂模式),2.工厂方法模式,3.抽象工厂模式特别建议大家可以敲下设计模式的...

  • 工厂方法模式

    1.简单工厂模式 先看一下简单工厂模式 代码: 2.工厂方法模式 简单工厂模式大家比较熟悉也比较简单,但是简单工厂...

  • 2.抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其...

网友评论

      本文标题:2.工厂模式

      本文链接:https://www.haomeiwen.com/subject/wildiktx.html