简单工厂##
简单工厂不是一个设计模式,是一种编程习惯,将创建具体对象的代码封装到一个类里头,如果有新类型添加,只需要修改简单工厂即可;
解决的是如何去实例化一个合适的对象;
客户端含一个工厂类,依赖,通过工厂来获取对象,这样客户端就避免了,实例化具体对象的操作过程了;
简单工厂类图:.
- 工厂类:简单工厂类的核心,工厂类包含全部产品类的创建逻辑;
- 抽象产品:简单工厂创建所有对象的抽象基类;
- 具体产品:简单工厂类,创建的具体实例对象;
工厂方法模式##
将对象的创建方法(工厂方法),定义成抽象方法,这样对象的创建就交给子类了,实际使用对象时,我们面对的是抽象;
工厂方法用来处理对象的创建,将对象的创建行为封装在子类中;
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪个。工厂方法让类把实例化退迟到子类;
工厂模式减少对具体类型的依赖;
** 工厂方法模式类图 **
- 创建者类:定义了一个抽象的创建抽象产品(Product)的工厂方法,让子类实现此方法来创建具体产品;
ConcreteCreator1 与 ConcreteCreator2 为具体的工厂,专门用来创建产品; - 产品类:抽象产品,与具体产品;工厂创建的产品,都在这里;
- 创建者类与产品类,都有抽象,与具体实现;它们2者的关系是平行的;
** 与简单工厂对比 **
- 工厂方法模式,是创建框架,让子类去决定如何实现实例化对象;
- 简单工厂是将对象的创建封装起来,但简单工厂,不具备工厂方法的弹性,她不能变更正在创建的产品;
抽象工厂模式##
通过抽象工厂所提供的接口,可以创建产品的家族,利用抽象工厂接口的规范,代码将从实际工厂解耦,以便在不同的上下文环境中,实现各式各样的工厂,来制造各种不同的产品;
** 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类 **
抽象工厂允许客户使用抽象的接口来创建一组相关的产品,客户不需要关心实际产出的具体产品是什么;这样客户就从具体的产品中被解耦了;
** 抽象工厂模式类图 **
客户端中,只涉及到抽象工厂,运行时,将自动使用实际的工厂;
抽象工厂与工厂方法对比
- 都是负责创建对象的,工厂方法,通过继承来创建对象,抽象工厂,通过组合创建对象;
- 抽象工厂用来创建一个产品家族,工厂方法创建单一的产品;
- 抽象工厂经常用工厂方法来实现具体工厂;