设计模式——抽象工厂模式AbstractFactory
2017-08-12 22:13
525 查看
抽象工厂模式 AbstractFactory:是对工厂模式的一个拓展,实际上就是进行了一次封装,相比于工厂模式,抽象工厂模式层次更高。抽象工厂模式返回的是一组类的工厂,而这个工厂会返回多个子类中的一个,可以简单的理解为:现在有多个小的工厂,用一个大的工厂AbstractFactory 进行封装,然后返回其中的一个工厂factory ,工厂factory 再根据实际参数返回一个子类的实例。
应用场景:屏蔽了这些具体类的创建方法,实现了客户端与具体类的解耦。因为具体类是屏蔽的,所以可以在不同的工厂之间进行切换。
简单的例子:
三个不同的子类:
简单的Demo实现:
应用场景:屏蔽了这些具体类的创建方法,实现了客户端与具体类的解耦。因为具体类是屏蔽的,所以可以在不同的工厂之间进行切换。
简单的例子:
public abstract class Car { public abstract Parts getWheels(); public abstract Parts getMirros(); public abstract Parts getEngine();; public abstract Parts getBody(); }
public class Parts { public String spe; public Parts(String spe){ this.spe = spe; } public String getSpe(){ return spe; } }
三个不同的子类:
public class BenQ extends Car { @Override public Parts getWheels() { // TODO Auto-generated method stub return new Parts("BenQ Wheels"); } @Override public Parts getMirros() { // TODO Auto-generated method stub return new Parts("BenQ Mirros"); } @Override public Parts getEngine() { // TODO Auto-generated method stub return new Parts("BenQ Engine"); } @Override public Parts getBody() { // TODO Auto-generated method stub return new Parts("BenQ Body"); } }
public class BMW extends Car { @Override public Parts getWheels() { // TODO Auto-generated method stub return new Parts("BMW Wheels"); } @Override public Parts getMirros() { // TODO Auto-generated method stub return new Parts("BMW Mirros"); } @Override public Parts getEngine() { // TODO Auto-generated method stub return new Parts("BMW "); } @Override public Parts getBody() { // TODO Auto-generated method stub return new Parts("BMW Body"); } }
public class GeneralCar extends Car { @Override public Parts getWheels() { // TODO Auto-generated method stub return new Parts("GeneralCar Wheels"); } @Override public Parts getMirros() { // TODO Auto-generated method stub return new Parts("GeneralCar Mirros"); } @Override public Parts getEngine() { // TODO Auto-generated method stub return new Parts("GeneralCar Engine"); } @Override public Parts getBody() { // TODO Auto-generated method stub return new Parts("GeneralCar Body"); } }
简单的Demo实现:
public class CarType { private static Car car; public static void main(String args[]){ CarType type = new CarType(); car = type.getCar("BenQ"); } /** * 根据参数 type 决定要实例化的子类是哪个 * * @param type * @return */ public Car getCar(String type){ if(type.equals("BenQ")){ car = new BenQ(); } else if(type.equals("BMW")){ car = new BMW(); } else if(type.equals("GeneralCar")) car = new GeneralCar(); return car; } }
相关文章推荐
- 初学设计模式【6】抽象工厂模式——AbstractFactory
- 面向对象的设计模式系列之三:抽象工厂模式(AbstractFactory)
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- [设计模式]AbstractFactory抽象工厂模式
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- 设计模式(c++)笔记之二(AbstractFactory抽象工厂模式)
- 设计模式之抽象工厂模式(AbstractFactory)
- 设计模式 (三)抽象工厂模式(AbstractFactory)
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- C++设计模式-AbstractFactory抽象工厂模式
- C++设计模式-AbstractFactory抽象工厂模式
- C++设计模式的AbstractFactory(抽象工厂模式)图解
- 设计模式之抽象工厂模式(AbstractFactory)
- 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型
- 设计模式 (三)抽象工厂模式(AbstractFactory)
- Php设计模式之工厂模式(三)【抽象工厂模式 AbstractFactory】
- C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】
- 我的设计模式之旅(3)——抽象工厂模式AbstractFactory
- C++设计模式-AbstractFactory抽象工厂模式