设计模式-抽象工厂模式
程序员文章站
2022-05-06 11:21:56
...
抽象工厂模式(Abstract Factory Pattern)
每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构.
先来认识下什么是产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。还是让我们用一个例子来形象地说明一下吧。
图中的BmwCar和BenzCar就是两个产品树(产品层次结构);而如图所示的BenzSportsCar和BmwSportsCar就是一个产品族。他们都可以放到跑车家族中,因此功能有所关联。同理BmwBussinessCar和BenzBussinessCar也是一个产品族。
抽象产品
实际产品
抽象工厂
实际工厂
抽象工厂模式与工厂方法模式的区别:
(1)、其实工厂方法模式是用来创建一个产品的等级结构的,而抽象工厂模式是用来创建多个产品的等级结构的。工厂方法创建一般只有一个方法,创建一种产品。抽象工厂一般有多个方法,创建一系列产品。
(2)、工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
简而言之->
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
JDK中的应用
如:DriverManager
每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构.
先来认识下什么是产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。还是让我们用一个例子来形象地说明一下吧。
图中的BmwCar和BenzCar就是两个产品树(产品层次结构);而如图所示的BenzSportsCar和BmwSportsCar就是一个产品族。他们都可以放到跑车家族中,因此功能有所关联。同理BmwBussinessCar和BenzBussinessCar也是一个产品族。
抽象产品
public abstract class BenzCar { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } public abstract class BmwCar { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
实际产品
public class BenzBusinessCar extends BenzCar{ public BenzBusinessCar(){ this.setName("奔驰商务车"); } } public class BenzSportsCar extends BenzCar{ public BenzSportsCar(){ this.setName("奔驰跑车"); } } public class BmwBusinessCar extends BmwCar{ public BmwBusinessCar(){ this.setName("宝马商务车"); } } public class BmwSportsCar extends BmwCar{ public BmwSportsCar(){ this.setName("宝马跑车"); } }
抽象工厂
public interface CarFactory { public BmwCar createBmwCar(); public BenzCar createBenzCar(); }
实际工厂
public class BusinessCarFactory implements CarFactory{ @Override public BmwCar createBmwCar() { return new BmwBusinessCar(); } @Override public BenzCar createBenzCar() { return new BenzBusinessCar(); } } public class SportsCarFactory implements CarFactory{ @Override public BmwCar createBmwCar() { return new BmwSportsCar(); } @Override public BenzCar createBenzCar() { return new BenzSportsCar(); } }
抽象工厂模式与工厂方法模式的区别:
(1)、其实工厂方法模式是用来创建一个产品的等级结构的,而抽象工厂模式是用来创建多个产品的等级结构的。工厂方法创建一般只有一个方法,创建一种产品。抽象工厂一般有多个方法,创建一系列产品。
(2)、工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
简而言之->
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
JDK中的应用
如:DriverManager
上一篇: php中将一个对象保存到Session中的方法_PHP
下一篇: c++常见面试题