工厂模式
定义
- 工厂模式主要作用是为创建对象提供接口,将创建对象的过程分离出来,实现创建者与调用者的隔离,提高程序的灵活性。
- 主要目标:
- 分离实例化对象的过程,用工厂方法代替
new
操作- 将选择实现类、创建对象、对象的统一管理和控制等功能分离,使调用者跟实现类解耦
- 主要分类:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
简单工厂模式
- 又称为静态工厂方法
- 主要组成结构:
- 抽象产品: 定义产品的基本属性
- 具体产品: 定义具体产品的属性
- 工厂类: 创建具体产品
示例
抽象产品
1 | public interface IHero |
具体产品
1 | public class IronMan : IHero |
1 | public class Thor : IHero |
工厂类
1 | public class SimpleFactory |
调用方法
1 | static void Main(string[] args) |
总结
- 简单工厂模式初步实现了对象实例化方法的剥离,但是,简单工厂对于拓展开发不是很友好,以后若是要拓展新的产品则需要修改工厂类的原始代码,这显然是违反了开闭原则(对拓展开放,对修改关闭)的
工厂方法模式
- 由于简单工厂模式违反了开闭原则,在大型的项目长期开发中不适合使用,为了不违反开闭原则,在简单工厂代码的基础上稍作修改即可
- 主要组成结构:
- 抽象产品: 定义产品的基本属性
- 具体产品: 定义具体产品的属性
- 抽象工厂: 定义工厂的基本属性
- 具体工厂: 创建具体产品
示例
抽象产品
1 | public interface IHero |
具体产品
1 | public class IronMan : IHero |
1 | public class Thor : IHero |
抽象工厂
1 | public interface IHero |
具体工厂
1 | public class ThorFactory : IHeroFactory |
1 | public class IronManFactory : IHeroFactory |
调用方法
1 | static void Main(string[] args) |
总结
- 工厂方法模式有效的解决了项目拓展的问题,拓展时不需要修改原来的代码,但是工厂中一般可以生产很多种产品,所以在工厂方法模式上再进一步优化,就可以得到抽象工厂模式
抽象工厂模式
- 抽象工厂其实就是在工厂方法模式的基础上,在具体工厂中可以创建多种具体产品,更加贴近实际应用。具体结构与工厂方法模式类似。
拓展:单例模式
- 工厂模式拓展出来的模式中应用最广泛的就是单例模式
- 由于将对象的创建通过工厂类控制,所以可以有效的控制实例化的数量,从而实现单例模式。
v1.5.2