软件设计模式及体系结构之工厂方法模式

前言

创建模式
创建型模式( Creational pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。 为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则
创建型设计模式的目标是将一个软件与其对象的创建、组合、表示分离开来,其目的是在哪个对象被创建、谁负责创建对象、怎样创建对象、何时创建对象方面增强灵活性
该模式的主要任务是为客户程序创建对象,而不是由客户程序直接初始化对象
在这里插入图片描述在这里插入图片描述

简单工厂模式

模式动机
只需要知道水果的名字则可得到相应的水果
在这里插入图片描述
◆使用简单工厂模式设讣一个可以创建不同几何形状( Shape)的绘图工具类,如可创建圆形( Circle)、矩形( Rectangle)和三角形(Triangle)对象,每个几何图形均具有绘制draw()和擦除 erase()两个方法,绘制类图并编程实现
在这里插入图片描述在这里插入图片描述

1.工厂方法模式

模式定义
工厂方法模式( Factory Method Pattern)又称为工厂模式,也叫虚拟构造器( Virtual constructor)模式或者多态工厂( Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

2.模式结构

在这里插入图片描述
在这里插入图片描述

工厂方法模式包含如下角色
Product:抽象产品
Concrete Product:具体产品
Factory:抽象工厂
ConcreteFactory:具体工厂

3.模式分析

1.工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。 这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
2.当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体产品对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,**很好地符合了“开闭原则”。**而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。

3.工厂方法模式的优缺点

工厂方法模式的优点
1.在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。
2.基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够使 工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。 工厂方法模式之所以又被称为多态工厂模式,是因为所有的具体工厂类都具有同一抽象父类。
3.使用工厂方法模式的另一个优点是在系统中加入新产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而 只要添加一个具体工厂和具体产品就可以了。 这样,系统的可扩展性也就变得非常好,完全符合“开闭原则
工厂方法模式的缺点
1.在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销
2.由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。

4.实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lpblog/article/details/121410323