您的位置:首页 > 其它

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

2017-08-12 22:13 525 查看
抽象工厂模式 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 {

@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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: