`

设计模式回顾之十一:抽象工厂模式(Abstract Factory)

 
阅读更多

设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

抽象工厂模式(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();
}

 

抽象工厂模式,更新中...

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics