设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。
------------------------------------------------
抽象工厂模式(Abstract Factory)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用于:
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
程序实现:
抽象类:
public abstract class DPDocument {
	abstract public void dump();
}public abstract class DPWorkspace {
	abstract public void dump();
}public abstract class DPView {
	abstract public void dump();
}抽象工厂类:
public abstract class DPFactory {
	abstract public DPDocument createDocument();
	abstract public DPView createView();
	abstract public DPWorkspace createWorkspace();
}构建:
public abstract class DPApplication {
	protected DPDocument doc;
	protected DPWorkspace workspace;
	protected DPView view;
	
	public void constructObjects(DPFactory factory){
		doc = factory.createDocument();
		workspace = factory.createWorkspace();
		view = factory.createView();
	}
	
	abstract public void dump();
	public void dumpState(){
		if (doc != null) doc.dump();
		if (workspace != null) workspace.dump();
		if (view != null) view.dump();
	}
}实现类:
public class MyDocument extends DPDocument{
	public MyDocument(){
		System.out.println("in MyDocument constructor");			
	}
	@Override
	public void dump(){
		System.out.println("MyDocument exists");
	}
}public class MyWorkspace extends DPWorkspace{
	public MyWorkspace(){
		System.out.println("in MyWorkspace constructor");			
	}
	@Override
	public void dump(){
		System.out.println("MyWorkspace exists");
	}
}public class MyView extends DPView{
	public MyView(){
		System.out.println("in MyWorkspace constructor");			
	}
	@Override
	public void dump() {
		System.out.println("MyView exists");
	}
}具体工厂:
public class MyFactory extends DPFactory{
	@Override
	public DPDocument createDocument() {
		return new MyDocument();
	}
	@Override
	public DPView createView() {
		return new MyView();
	}
	@Override
	public DPWorkspace createWorkspace() {
		return new MyWorkspace();
	}
}使用具体工厂创建:
public class MyApplication extends DPApplication{
	MyFactory myFactory = new MyFactory();
	@Override
	public void dump() {
		System.out.println("MyApplication exists");
	}
	public void createFamily(){
		myFactory = new MyFactory();
		constructObjects(myFactory);
	} 
}客户端:
public static void main(String[] args) {
		MyApplication myApplication = new MyApplication();
		myApplication.createFamily();
		myApplication.dumpState();
		myApplication.dump();
}
抽象工厂模式,更新中...










