抽象工厂模式(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眼镜除外),除非有创新,否则常年不会变,这时候使用抽象工厂方法就没有上面的扩展性问题,一定范围内不会变的东西不需要太考虑其扩展性

 

 

 

 

posted @ 2013-06-03 09:24  心意合一  阅读(192)  评论(0编辑  收藏  举报