先让我们看看工厂方法模式的缺点
工厂方法模式是对于每个产品类进行设计的 ,如果我有很多个产品类的话就会出一些问题,我们发现工厂类就会变得多起来.
现在看看抽象工厂方法模式
举例,现在我有两种房子,一种是House,一种是Condo,然后不管什么类型的房子又分medium(中等)和super(高等)
代码:
//House类
public interface House {
public String getHouseInfo();
}
pubic class SuperHouse implements House {
public String getHouseInfo() {
return "superHouse.html"l
}
}
pubic class MediumHouse implements House {
public String getHouseInfo() {
return "MediumHouse.html"l
}
}
//Condo类
public interface Condo {
public String getCondoInfo();
}
public class SuperCondo implements Condo {
public String getCondoInfo(){
return "superCondo.html";
}
}
public class MediumCondo implements Condo {
public String getCondoInfo(){
return "MediumCondo.html";
}
}
//抽象工厂类
public abstract class BuildingFactory {
public static final String SUPER = "Super Class";
public static final String MEDIUM = "Medium Class";
public abstract House getHouse();
public abstract Condo getCondo();
public static BuildingFactory getBuildingFactory(String type) {
BuildingFactory bf = null;
if (type.equals(BuildingFactory.SUPER)) {
bf = new SuperBuildingFactory();
}else if (type.equals(BuildingFactory.MEDIUM)) {
bf = new MediumBuildingFactory();
}
return bf;
}
}
public class MediumBuildingFactory extends BuildingFactory {
public House getHouse() {
return new MediumHouse();
}
public Condo getCondo() {
return new MediumCondo();
}
}
public class SuperBuildingFactory extends BuildingFactory {
public House getHouse() {
return new SuperHouse();
}
public Condo getCondo() {
return new SuperCondo();
}
}
使用示例:
何时使用抽象工厂模式:
当客户想要创建某个子类对象,而不想知道到底哪个类被创建了,等到我要使用的时候再决定创建哪个子类.
有关可扩展性:
只有一种情况下是可扩展性,就是增加了 一个子类,但是这个子类还是沿用抽象工厂类里的已有的方法,而不用加新的方法
再看看不满足的: