设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。
------------------------------------------------
抽象工厂模式(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();
}
抽象工厂模式,更新中...