06.设计模式.工厂方法模式(Factory Method)

合集下载

Python中的工厂模式

Python中的工厂模式

Python中的工厂模式工厂模式(Factory Pattern)是一种常用的设计模式,用于创建对象。

它属于创建型模式,通过定义一个工厂类负责创建其他对象的实例,而不必直接使用new关键字来创建对象。

工厂模式使得代码的可拓展性和复用性更好,同时也隐藏了对象的创建和实现细节,简化了客户端的操作。

工厂模式的核心思想是将对象的实例化操作封装起来,让客户端只需调用工厂方法即可创建所需的对象。

从而达到降低系统耦合度的目的。

工厂模式的实现方式有两种:一种是通过一个单独的工厂类来创建所需的对象,另一种是通过将工厂方法定义在需要创建对象的类中。

其中,单独的工厂类又可以分为简单工厂和工厂方法两种模式。

1.简单工厂模式简单工厂模式(Simple Factory Pattern),也叫静态工厂模式,由一个工厂类负责创建所有需要的产品类的实例。

客户端只需向该工厂类传递相应的参数,即可获取所需的对象。

该模式下,工厂类通常是一个静态类或者包含一个静态方法的类。

简单工厂模式的代码结构如下:```class Product:def __init__(self):passclass ProductA(Product):def __init__(self):print("Product A")class ProductB(Product):def __init__(self):print("Product B")class SimpleFactory:def create_product(self, product_type):if product_type == "A":return ProductA()elif product_type == "B":return ProductB()factory = SimpleFactory()productA = factory.create_product("A")productB = factory.create_product("B")```该代码中,类Product、ProductA、ProductB分别为抽象产品类、具体产品类。

软件开发几种设计模式

软件开发几种设计模式
产。
抽象工厂 :
用来生产不同产品族的全部固定产品; 可以增加新产品族(不同产品的组合),但不能增加新产品; 不同产品族通过不同的工厂类生成,一个类中有多个成员函数去
生成不同具体产品。
简单工厂
特点:
简单工厂模式的工厂类一般使用静态方法生成产品对象,通过输 入参数的不同来返回不同对象实例。
个工厂就生产一个品牌的所有轿车、货车和客车。 增加新的产品线(已有产品的组合)很容易,但是无法增加新的产品。
工厂模式
工厂模式中,重要的是工厂类,而不是产品类。
产品类可以是多种形式。 但要明确,工厂模式的接口只会返回一种类型的实
例。 所以在设计产品类时要注意,一般是返回父类或者
共同实现的接口。
单例模式
特点:
通过静态函数来生成唯一实例。 构造函数是私有的。
其主要功能都是帮助我们把对象的实例化部分 抽取出来,优化系统架构,增强系统扩展性。
工厂模式
主要作用
抽象了对象的构造过程,即生成对象的过程。
使得具有
可以具有一个共同的
或者统一的生成方法。避免了总是写几乎完全
重复的构造函数,生成功能差不多的对象。
注意:
类似功能的对象并不是完全相同的对象。它们 虽然大体类似,但是确有具体差别。
使用工厂模式,返回的实例一定是工厂创建的, 而不是从其它对象中获取的。
工厂模式返回的实例可以不是新创建的,返回 由工厂创建好的实例也可以。
单例模式 (Singleton Pattern)
单例模式
主要作用
保证一个类仅有一个实例,并提供一个访问它 的全局访问点。
简单地说,就是代替全局对象。
几种设计模式

23种设计模式记忆口诀

23种设计模式记忆口诀

23种设计模式记忆口诀设计模式是软件开发中常见的解决方案模板,它们能够解决许多常见的设计问题。

为了帮助记忆23种设计模式,可以使用下面这个口诀来记忆:Creational Patterns(创建型模式):1. Singleton(单例模式):一个类能产生一个实例,全局访问。

2. Builder(建造者模式):分步骤创建复杂对象,易拓展。

3. Factory Method(工厂方法模式):子类决定实例化哪个对象。

4. Abstract Factory(抽象工厂模式):创建一组相关对象,不依赖具体类。

5. Prototype(原型模式):通过复制现有对象来创建新对象。

Structural Patterns(结构型模式):6. Adapter(适配器模式):将类的接口转换为客户端希望的接口。

7. Bridge(桥接模式):将抽象部分与实际部分分离。

将对象组合成树形结构来表示部分整体的层次结构。

9. Decorator(装饰器模式):动态地给对象添加功能。

10. Facade(外观模式):提供一个统一的接口,简化客户端使用。

11. Flyweight(享元模式):共享细粒度对象,减少内存使用。

12. Proxy(代理模式):控制对其他对象的访问。

Behavioral Patterns(行为型模式):13. Chain Of Responsibility(责任链模式):将请求的发送者和接收者解耦,多个对象都可能处理请求。

将请求封装成对象,可以用参数化方式处理。

15. Iterator(迭代器模式):提供一种遍历集合的统一接口。

16. Mediator(中介者模式):将多个对象之间的复杂关系解耦。

17. Memento(备忘录模式):将对象的状态保存起来,以后可以恢复。

18. Observer(观察者模式):当一个对象改变状态时,依赖它的对象都会收到通知。

19. State(状态模式):对象的行为随状态的改变而改变。

简单工厂工厂方法抽象工厂策略模式策略与工厂的区别

简单工厂工厂方法抽象工厂策略模式策略与工厂的区别

简单工厂工厂方法抽象工厂策略模式策略与工厂的区别简单工厂、工厂方法、抽象工厂以及策略模式在软件开发中都是常用的设计模式,它们都是为了解决不同对象的创建和使用问题。

下面将对它们进行详细的介绍,并比较它们之间的区别。

1. 简单工厂模式(Simple Factory Pattern):简单工厂模式是由一个工厂类根据传入的参数决定创建哪种产品的设计模式。

它包含三个角色:工厂类负责创建产品,产品类定义产品的具体实现,客户端通过工厂类获取产品对象。

简单工厂模式将对象的创建与使用进行了分离,增加了灵活性,但是违反了开闭原则,因为每次新增产品都需要修改工厂类。

2. 工厂方法模式(Factory Method Pattern):工厂方法模式是指定义一个创建产品对象的接口,但是由子类决定实例化哪个类。

这样可以将产品的实例化延迟到子类中进行,满足了开闭原则。

工厂方法模式由抽象工厂类、具体工厂类和抽象产品类、具体产品类组成。

具体工厂类负责创建具体产品类的实例,抽象产品类定义了产品的接口。

客户端通过抽象工厂类获取产品对象。

工厂方法模式解决了简单工厂模式的缺点,但是增加了类的个数。

3. 抽象工厂模式(Abstract Factory Pattern):抽象工厂模式是指提供一个创建一系列相关或互相依赖对象的接口,而无需指定具体的类。

抽象工厂模式由抽象工厂类、具体工厂类和抽象产品类、具体产品类组成。

抽象工厂类定义了创建产品的接口,具体工厂类负责创建具体产品。

抽象产品类定义了产品的接口,具体产品类实现了产品的具体实现。

客户端通过抽象工厂类获取产品对象。

抽象工厂模式提供了一种创建一系列产品对象的方法,但是增加新产品时需要修改所有的工厂类。

4. 策略模式(Strategy Pattern):策略模式是指定义了一系列的算法,并将每个算法封装起来,使得它们可以互相替换,使得算法的选择和使用可以独立于客户端。

策略模式由抽象策略类、具体策略类和环境类组成。

面向对象设计的23个设计模式详解

面向对象设计的23个设计模式详解

面向对象设计的23个设计模式详解面向对象设计是一种广泛应用于软件开发的思想,其核心在于将数据和操作封装在一起形成对象,并通过各种方式进行交互和组合,从而实现复杂的功能。

在这一过程中,设计模式起到了非常重要的作用,可以有效地提高代码的可读性、可维护性和可扩展性。

本文将对23种常见的设计模式进行详解。

一、创建型模式1.简单工厂模式简单工厂模式属于创建型模式,其目的是提供一个工厂类,使得创建对象的过程更加简单。

在这种模式中,使用者只需要提供所需对象的参数,而无需关心对象的具体实现细节。

简单工厂模式适合于对象创建过程较为简单的情况。

2.工厂方法模式工厂方法模式是简单工厂模式的进一步扩展,其核心在于将工厂类进行接口抽象化,使得不同的工厂类可以创建不同的对象实例。

工厂方法模式适合于对象创建过程较为复杂的情况。

它可以为工厂类添加新的产品类型,而不会影响原有的代码。

3.抽象工厂模式抽象工厂模式是工厂方法模式的进一步扩展,其目的是提供一个可以创建一系列相关或者独立的对象的接口。

在抽象工厂模式中,使用者只需要关心所需对象组合的类型,而无需关注对象的具体实现过程。

4.建造者模式建造者模式也是一种创建型模式,其目的在于将复杂对象分解为多个简单的部分,并将其组装起来形成复杂对象实例。

在建造者模式中,使用者只需要关注所需对象以及它们的组合方式,而无需关心对象的具体实现过程。

5.原型模式原型模式是一种基于克隆的创建型模式,其核心在于通过复制现有的对象实例来创建新的对象。

在原型模式中,对象实例的创建过程与对象所包含的状态密切相关。

原型模式适合于创建复杂对象实例,且这些对象实例之间是相对独立的情况。

二、结构型模式6.适配器模式适配器模式是一种结构型模式,其目的在于将一个类的接口转换为另一个类所能使用的接口。

在适配器模式中,使用者可以通过不同的适配器实现对象之间的互相调用。

7.桥接模式桥接模式是一种结构型模式,其目的在于将抽象部分与实现部分相互分离,从而使得两者可以独立变化。

06设计模式工厂方法模式Fac讲义toryMethod

06设计模式工厂方法模式Fac讲义toryMethod

简单工厂类 +CreateOperate() : 运算类
用户要求:添加一个新运算
问题(Problem)
class OperationFactory {
public static Operation createOperate(string operate) {
Operation oper = null; switch (operate) {
加法工厂
减法类 +GetResult() : double
除法类 +GetRes厂
工厂方法模式(Factory Method)
// 工厂方法 interface IFactory {
Operation CreateOperation(); }
// 专门负责生产“+”的工厂 class AddFactory : IFactory {
public Operation CreateOperation() {
return new OperationDiv(); } }
工厂方法模式(Factory Method)
static void Main(string[] args) {
try {
Console.Write("请输入数字A:"); string strNumberA = Console.ReadLine(); Console.Write("请输入数字B:"); string strNumberB = Console.ReadLine(); string strResult = "";
精品
06设计模式工厂方法模式 FactoryMethod
问题(Problem)

设计模式(简单工厂,工厂方法,抽象工厂)区别

设计模式(简单工厂,工厂方法,抽象工厂)区别

第一种表述简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。

其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。

本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。

简单工厂简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。

不修改代码的话,是无法扩展的。

工厂方法工厂方法是针对每一种产品提供一个工厂类。

通过不同的工厂实例来创建不同的产品实例。

在同一等级结构中,支持增加任意产品。

抽象工厂抽象工厂是应对产品族概念的。

比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。

应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。

小结★工厂模式中,重要的是工厂类,而不是产品类。

产品类可以是多种形式,多层继承或者是单个类都是可以的。

但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。

★使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。

★工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。

区别简单工厂:用来生产同一等级结构中的任意产品。

(对于增加新的产品,无能为力)工厂模式:用来生产同一等级结构中的固定产品。

(支持增加任意产品)抽象工厂:用来生产不同产品族的全部产品。

(对于增加新的产品,无能为力;支持增加产品族)以上三种工厂方法在等级结构和产品族这两个方向上的支持程度不同。

所以要根据情况考虑应该使用哪种方法。

第二种表述简单工厂、工厂方法和抽象工厂都是创建型的设计模式。

三者的共同点是:1、都有两种作用不同的类:产品类和工厂类。

其中,工厂类在自己的方法中实例化产品类(即使用new命令生成产品类的对象),并将生成的产品类的对象提供给外部使用。

2、创建的过程,都是类似的:工厂类得到一个标志(可以由程序输入,也可以读取配置文件中的内容),返回一个产品对象。

23种设计模式资料

23种设计模式资料

一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。

用一个图片来整体描述一下:二、设计模式的六大原则1、开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。

在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。

所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。

想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。

里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。

LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

里氏代换原则是对“开-闭”原则的补充。

实现“开-闭”原则的关键步骤就是抽象化。

而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

—— From Baidu 百科3、依赖倒转原则(Dependence Inversion Principle)这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

加法类 +GetResult() : double
乘法类 +GetResult() : double
加法工厂
乘法工厂
减法类 +GetResult() : double
除法类 +GetResult() : double
减法工厂
除法工厂
武汉科技大学

工厂方法模式(Factory Method)
运算类
+NumberA : double +NumberB : double +GetResult() : double <<interface>> 工厂接口
加法类 +GetResult() : double
乘法类 +GetResult() : double
加法工厂
乘法工厂
减法类 +GetResult() : double
而如何能做到这一点呢? 依赖于抽象!
武汉科技大学

问题(Problem) 开放封闭原则
实现开放封闭的核心思想就是对抽象编程,而不对 具体编程,因为抽象相对稳定。让类依赖于固定的 抽象,所以对修改就是封闭的;而通过面向对象的 继承和对多态机制,可以实现对抽象体的继承,通
}Байду номын сангаас
} catch (Exception ex) { Console.WriteLine("您的输入有错:" + ex.Message); }
武汉科技大学

工厂方法模式(Factory Method) 模式动机
模式名称:工厂方法模式(Factory Method) 模式动机:简单工厂模式如果需要增加新类型,那么 需要修改工厂类的代码,这就使得整个设计在一定程 度上违反了“开放封闭原则”。我们定义一个抽象的
武汉科技大学

工厂方法模式(Factory Method)
static void Main(string[] args) { try { Console.Write("请输入数字A:"); string strNumberA = Console.ReadLine(); Console.Write("请输入数字B:"); string strNumberB = Console.ReadLine(); string strResult = ""; IFactory operFactory = new AddFactory(); Operation oper = operFactory.CreateOperation(); oper.NumberA = Convert.ToDouble(strNumberA); oper.NumberB = Convert.ToDouble(strNumberB); strResult = oper.GetResult().ToString(); Console.WriteLine("结果是:" + strResult); Console.ReadLine();
乘法类 +GetResult() : double
简单工厂类 +CreateOperate() : 运算类
减法类 +GetResult() : double
除法类 +GetResult() : double
用户要求:添加一个新运算
武汉科技大学

问题(Problem)
class OperationFactory { public static Operation createOperate(string operate) { Operation oper = null; switch (operate) { case "+": { oper = new OperationAdd(); break; } case "-": { oper = new OperationSub(); break; } …… } return oper; } }
成其工作,而不要对类进行任何修改。
武汉科技大学

问题(Problem) 开放封闭原则
“需求总是变化”、“世界上没有一个软件是不 变的”,这些言论是对软件需求最经典的表白。 从中透射出一个关键的意思就是,对于软件设计 者来说,必须在不需要对原有的系统进行修改的
情况下,实现灵活的系统扩展。
设计模式(Design Pattern)
张凯 副教授 计算机学院 软件工程系
LOGO
武汉科技大学

问题(Problem) 开放封闭原则
开放封闭原则(OCP,Open Closed Principle)是所 有面向对象原则的核心。软件设计本身所追求的目标 就是封装变化、降低耦合,而开放封闭原则正是对这 一目标的最直接体现。
过覆写其方法来改变固有行为,实现新的扩展方法,
所以对于扩展就是开放的。这是实施开放封闭原则 的基本思路。
武汉科技大学

问题(Problem)
运算类
+NumberA : double +NumberB : double +GetResult() : double
加法类 +GetResult() : double
工厂方法模式是简单工厂模式的延伸,它继承了简单 工厂模式的优点,同时还弥补了简单工厂模式的不足。 工厂方法模式是使用频率最高的设计模式之一,是很 多开源框架和API类库的核心模式。
武汉科技大学

工厂方法模式(Factory Method) 工厂方法模式的优点如下
在工厂方法模式中,工厂方法用来创建客户所需要的 产品,同时还向客户隐藏了哪种具体产品类被实例化 这一细节,用户只需要关心所需产品对应的工厂,无 需关心创建产品的细节,甚至无需知道产品类的类名。
// 专门负责生产“-”的工厂 class SubFactory : IFactory { public Operation CreateOperation() { return new OperationSub(); } }
// 专门负责生产“*”的工厂 class MulFactory : IFactory { public Operation CreateOperation() { return new OperationMul(); } } // 专门负责生产“/”的工厂 class DivFactory : IFactory { public Operation CreateOperation() { return new OperationDiv(); } }
工厂类,而定义具体的工厂类来实现这个抽象按钮工
厂类中定义的方法。抽象化的结果使这种结构可以在 不修改具体工厂类的情况下引进新的产品。这一特点 使得工厂方法模式具有超越简单工厂模式的优越性。
武汉科技大学

工厂方法模式(Factory Method) 模式定义
工厂方法模式(Factory Method Pattern):工厂方法模 式又简称为工厂模式,也叫虚拟构造器(Virtual
武汉科技大学

工厂方法模式(Factory Method)
// 工厂方法 interface IFactory { Operation CreateOperation(); }
// 专门负责生产“+”的工厂 class AddFactory : IFactory { public Operation CreateOperation() { return new OperationAdd(); } }
// 专门负责生产“-”的工厂 class SubFactory : IFactory { public Operation CreateOperation() { return new OperationSub(); } }
// 专门负责生产“*”的工厂 class MulFactory : IFactory { public Operation CreateOperation() { return new OperationMul(); } } // 专门负责生产“/”的工厂 class DivFactory : IFactory { public Operation CreateOperation() { return new OperationDiv(); } }
武汉科技大学

工厂方法模式(Factory Method) 模式结构
Product
Creator
+FactoryMethod() : Product
ConcreteProduct
ConcreteCreator +FactoryMethod() : Product
为什么是依赖关系
基于工厂角色和产品角色的多态性设计是工厂方法模
式的关键。它能够使工厂可以自主确定创建何种产品 对象,而如何创建这个对象的细节则完全封装在具体 工厂内部。
武汉科技大学

工厂方法模式(Factory Method) 工厂方法模式的优点如下
// 工厂方法 interface IFactory { Operation CreateOperation(); }
// 专门负责生产“+”的工厂 class AddFactory : IFactory { public Operation CreateOperation() { return new OperationAdd(); } }
武汉科技大学

工厂方法模式(Factory Method) 参与者
Product:抽象产品 ConcreteProduct:具体产品 Factory:抽象工厂 ConcreteFactory:具体工厂
相关文档
最新文档