抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式定义:抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
其实和策略模式还是蛮像的,只不过现在抽象分离出去的不是一个普通类,而是一个工厂类,并且工厂类依赖于多个抽象类(比如:酱料和火腿)
public class Store {
private AbstractSourceFactory factory;
public Store(AbstractSourceFactory factory){
this.factory = factory;
}
public void getSource(){
factory.sendSauce();
factory.sendHam();
}
}public abstract class AbstractSourceFactory {
public abstract Sauce sendSauce();
public abstract Ham sendHam();
}public class NYSourceFactory extends AbstractSourceFactory {
public Sauce sendSauce() {
return new TomatoSauce();
}
public Ham sendHam() {
return new OriginalHam();
}
}public class CHSourceFactory extends AbstractSourceFactory {
public Sauce sendSauce() {
return new StrawBerrySauce();
}
public Ham sendHam() {
return new BakeHam();
}
}public class Ham {
protected String des;
protected String getDes(){
return this.des;
}
}public class OriginalHam extends Ham {
public OriginalHam(){
System.out.println("OriginalHam");
}
}public class BakeHam extends Ham {
public BakeHam(){
System.out.println("BakeHam");
}
}public class Sauce {
protected String des;
protected String getDes(){
return this.des;
}
}public class StrawBerrySauce extends Sauce {
public StrawBerrySauce(){
System.out.println("StrawBerrySauce");
}
}public class TomatoSauce extends Sauce {
public TomatoSauce(){
System.out.println("TomatoSauce");
}
}
ps:
缺点比较明显,当工厂方法中需要加上一类抽象或者移除一类抽象的时候(比如移除Hum),需要修改所有的具体工厂
但是考虑到抽象工厂方法通常用来创建一个产品家族(原料),比如,制作眼镜的原料一般是固定的(google眼镜除外),除非有创新,否则常年不会变,这时候使用抽象工厂方法就没有上面的扩展性问题,一定范围内不会变的东西不需要太考虑其扩展性
浙公网安备 33010602011771号