一、概要
工厂方法(FactoryMethod)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
二、生活中的例子
例如移动电信运营商,不同的话费套餐形式,如动感地带,神州行,全球通等。我们可以把抽象工厂(套餐工厂)做成一个接口,这个接口只有一个方法,就是创建抽象产品(计费类)的工厂方法。然后所有的要生产具体类(动感地带,神州行等)的工厂去实现这个接口,由具体的套餐工厂去创建具体的套餐类。于是我们再增加新的套餐的时候,就不需要更改原有的工厂类,只需要增加此功能的计费类和相应的工厂类就可以了。
图示:

三、实现思路
工厂方法模式是对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
四、类图
五、注意点
1、工厂方法模式克服了简单工厂模式违背开放—封闭原则的缺点,又保持了封装对象创建过程的优点
2、工厂方法模式每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发量。
3、工厂方法模式把简单工厂的内部逻辑判断(switch)判断移到了客户端代码进行,利用“反射”可以避免分支判断的问题,我们不在这里介绍。
4、工厂方法模式与简单工厂模式的区别
(1)工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
(2)工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。
(3)当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
六、实例
需求:实现上面二、生活中的例子。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 工厂方法模式
{
class Program
{
static void Main(string[] args)
{
//要改成其它套餐,修改这里即可
IFactory factory = new DongGanDiDaiFactory();
TaoCan DGDD = factory.CreateTaoCan();
DGDD.Count();
}
}
//套餐工厂
interface IFactory
{
TaoCan CreateTaoCan();
}
//动感地带套餐工厂
class DongGanDiDaiFactory : IFactory
{
public TaoCan CreateTaoCan()
{
return new DongGanDiDai();
}
}
//神州行套餐工厂
class ShenZhouXingFactory : IFactory
{
public TaoCan CreateTaoCan()
{
return new ShenZhouXing();
}
}
//全球通套餐工厂
class QuanQiuTongFactory : IFactory
{
public TaoCan CreateTaoCan()
{
return new QuanQiuTong();
}
}
//套餐
class TaoCan
{
public void Count()
{
Console.WriteLine("采用{0}方式计费",this.GetType().Name);
}
}
//动感地带套餐
class DongGanDiDai:TaoCan
{
}
//神州行套餐
class ShenZhouXing:TaoCan
{
}
//全球通套餐
class QuanQiuTong:TaoCan
{
}
}
如果要再添加其他套餐,只要添加相应的套餐工厂类和套餐类即可。
七、何时选用工厂方法模式
建议在如下情况中,选用工厂方法模式:
1、如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况可以选用工厂方法模式,把创建对象的工作延迟到子类去实现
2、如果一个类本身就希望,由它的子类来创建所需的对象的时候,应该使用工厂方法模式
八、总结
工厂方法(Factory Method)模式是设计模式中应用最为广泛的模式,它考虑到对象的创建时机问题,它提供了一种扩展的策略,很好地符合了开放封闭原则,以上通过对简单工厂和工厂方法模式的比较,以及理论加实例的介绍,简单说明了如何使用工厂。
分享到:
相关推荐
工厂方法模式是面向对象设计模式中的行为型模式之一,它提供了一种...在提供的文件列表中,“FactoryMethod”可能是包含这个简单示例代码的文件。如果有机会查看这个文件,将能更深入地理解工厂方法模式的实现细节。
《设计模式之——工厂方法(Factory Method)》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它被广泛应用于构建高质量、可维护的代码。工厂方法是面向对象设计模式的一种,属于创建型模式。这个...
C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)
工厂方法模式与简单工厂模式相比,具有更好的可扩展性。在简单工厂模式中,工厂类通常是静态的,负责创建所有类型的对象,这导致在添加新产品时,需要修改工厂类。而在工厂方法模式中,每种产品都有专门的工厂类负责...
- **简单工厂模式**:工厂方法模式比简单工厂模式更具有扩展性和灵活性,简单工厂模式只有一个静态工厂方法,而工厂方法模式则允许有更多的具体工厂。 - **抽象工厂模式**:工厂方法模式关注单个产品族,而抽象工厂...
设计模式C++学习之工厂方法模式(Factory Method)
### C++设计模式之Factory Method(工厂方法) #### 概述 C++设计模式课件8_Factory Method_工厂方法.pdf是一份详细介绍了C++设计模式中的“工厂方法”模式的专业文档。该文档由极客班与网易云课堂联合出品,旨在...
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个具体类。这样,客户端代码就不需要知道具体的类是什么,只需通过工厂接口获取对象。 工厂...
### Factory Method 工厂方法模式(创建型模式) #### 概述 在软件工程领域,设计模式是一种在特定上下文中解决常见问题的通用方案。Factory Method(工厂方法)模式是GoF(Gang of Four)设计模式之一,属于创建型...
在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...
工厂方法(Factory Method)是面向对象设计模式中的一个基础且广泛应用的模式,它属于创建型模式,主要目的是为了解耦对象的创建过程。本文将深入探讨工厂方法的设计理念、实现方式及其在实际开发中的应用。 ### ...
5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER ...
Factory Method 工厂方法模式(创建型模式).wmv
Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
它们都是由不同的厂家生产的,这就是工厂方法模式(FactoryMethod)与前面所说的简单工厂模式(SimpleFactory)的差别。 实例: 多文档系统。我已经用C#的源码编程了:请下载Factory Method Patter.rar
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) (Level 300)
在给定的"FactoryMethod"文件中,我们可以预期包含以下内容: - 一个抽象工厂类,如`ProductFactory`,其中定义了一个或多个创建产品的方法,这些方法通常是抽象的或声明为返回类型为抽象产品的接口。 - 至少两个...
至于标签中的“FactoryMethod 将#”,可能是因为标签被不完整地输入了。通常,“#”用于标记话题或者关键词,这里可能是想表达“工厂方法模式”的话题。在Java中,工厂方法模式通常用于实现“开闭原则”,即软件实体...