设计模式——抽象工厂模式AbstractFactory

来源:互联网 发布:上海淘宝摄影基地 编辑:程序博客网 时间:2024/06/07 15:50


抽象工厂模式 AbstractFactory:是对工厂模式的一个拓展,实际上就是进行了一次封装,相比于工厂模式,抽象工厂模式层次更高。抽象工厂模式返回的是一组类的工厂,而这个工厂会返回多个子类中的一个,可以简单的理解为:现在有多个小的工厂,用一个大的工厂AbstractFactory 进行封装,然后返回其中的一个工厂factory ,工厂factory 再根据实际参数返回一个子类的实例。


应用场景:屏蔽了这些具体类的创建方法,实现了客户端与具体类的解耦。因为具体类是屏蔽的,所以可以在不同的工厂之间进行切换。


简单的例子:

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 {@Overridepublic Parts getWheels() {// TODO Auto-generated method stubreturn new Parts("BenQ Wheels");}@Overridepublic Parts getMirros() {// TODO Auto-generated method stubreturn new Parts("BenQ Mirros");}@Overridepublic Parts getEngine() {// TODO Auto-generated method stubreturn new Parts("BenQ Engine");}@Overridepublic Parts getBody() {// TODO Auto-generated method stubreturn new Parts("BenQ Body");}}


public class BMW extends Car {@Overridepublic Parts getWheels() {// TODO Auto-generated method stubreturn new Parts("BMW Wheels");}@Overridepublic Parts getMirros() {// TODO Auto-generated method stubreturn new Parts("BMW Mirros");}@Overridepublic Parts getEngine() {// TODO Auto-generated method stubreturn new Parts("BMW ");}@Overridepublic Parts getBody() {// TODO Auto-generated method stubreturn new Parts("BMW Body");}}


public class GeneralCar extends Car {@Overridepublic Parts getWheels() {// TODO Auto-generated method stubreturn new Parts("GeneralCar Wheels");}@Overridepublic Parts getMirros() {// TODO Auto-generated method stubreturn new Parts("GeneralCar Mirros");}@Overridepublic Parts getEngine() {// TODO Auto-generated method stubreturn new Parts("GeneralCar Engine");}@Overridepublic Parts getBody() {// TODO Auto-generated method stubreturn 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();}elseif(type.equals("BMW")){car = new BMW();}elseif(type.equals("GeneralCar"))car = new GeneralCar();return car;}}





原创粉丝点击