创建型---抽象工厂模式

模式概述

  • 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题。
  • 但是由于工厂方法模式中每个具体工厂只能产生一个单一的对象,如果需要工厂提供多种产品对象,那么会存在大量的工厂类,加大系统的开销。
  • 可以考虑将一些相关的产品组成一个产品族,由同一个工厂来统一生产,这就是抽象工厂模式的基本思想。
  • 例如: 我需要生产海尔电视机,海尔冰箱,海尔空调,海信冰箱,海信空调,海信电视机,Tcl电视机,TCL冰箱,TCL空调,如果用工厂方法模式的话,就要创建9个具体工厂类,但是如果使用抽象工厂模式的话,只需要按照产品等级结构(海尔,海信,TCL)和产品族(电视机,冰箱,空调,)划分,只需要提供三个具体工厂,极大的减少了系统种类的歌个数。
  • 定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类,抽象工厂模式又成为工具模式。

模式结构

  • AbstractFactory(抽象工厂):我们一组用于创建一产品的方法,一个方法对应一种产品。
  • ConcreteFactory(具体工厂):生成一组具体产品,这些产品构成了一个产品族。
  • AbstractProduct(抽象产品):声明产品所具有的业务方法。
  • ConcreteProduct(具体产品):具体产品对象。

代码实现

需求: 设计一款皮肤库,有不同风格,每种风格又分种类。风格就是等级结构,后面的就是产品族

在这里插入图片描述

在这里插入图片描述

优缺点

  • 优点:
  1. 隔离了具体类的生成,用户并不需要知道什么被创建,只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统行为。
  2. 当一个产品族中多个对象被设计成一起工作时,他能够保证客户端是终止使用同一个产品族中的对象。
  3. 增加新的产品族很方便,无需修改已有系统。
  • 缺点:
  1. 增加新的产品等级结构很麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来很大的不便,违背了开闭原则。

猜你喜欢

转载自blog.csdn.net/weixin_44861399/article/details/105903429