这样添加操作对象是,就不需要修改代码,直接创建类就可以了!
如图:
举例说明,拿操作文档为例吧,
先创建文档的超级接口,对文档有打开、保存、恢复和关闭的操作
package design.factorymethod;
/**
* 文件名称:design.singleton.Singleton.java
* 创建人:Fei Wong
* 创建时间: 2012-06-20
* 电子邮箱:
* 说明:工厂方法模式是简单工厂模式的衍生
* */
public interface Document {
void open() ;
void save() ;
void revert() ;
void close() ;
}
再创建txt文档的操作类:
package design.factorymethod;
/**
* 文件名称:design.singleton.Singleton.java
* 创建人:Fei Wong
* 创建时间: 2012-06-20
* 电子邮箱:
* 说明:此类是对txt文档进行操作
* */
public class TextDocument implements Document {
@Override
public void close() {
System.out.println( "关闭txt文档" );
}
@Override
public void open() {
System.out.println( "打开txt文档" );
}
@Override
public void revert() {
System.out.println( "恢复txt文档" );
}
@Override
public void save() {
System.out.println( "保存txt文档" );
}
}
创建了txt的操作类后,需要穿件工厂对其进行生产,此工厂只产TextDocument对象:
package design.factorymethod;
/**
* 文件名称:design.singleton.Singleton.java
* 创建人:Fei Wong
* 创建时间: 2012-06-20
* 电子邮箱:
* 说明:此工厂只生产TextDocument,其他的不生产
* */
public class TextDocumentFactory {
public static TextDocument geTextDocument(){
return new TextDocument() ;
}
}
package design.factorymethod;
/**
* 文件名称:design.singleton.Singleton.java
* 创建人:Fei Wong
* 创建时间: 2012-06-20
* 电子邮箱:
* 说明:此类是对doc文档进行操作
* */
public class DocDocument implements Document {
@Override
public void close() {
System.out.println( "关闭doc文档" );
}
@Override
public void open() {
System.out.println( "打开doc文档" );
}
@Override
public void revert() {
System.out.println( "恢复doc文档" );
}
@Override
public void save() {
System.out.println( "保存doc文档" );
}
}
创建对Doc操作类的工厂,此工厂只产DocDocument对象:
package design.factorymethod;
/**
* 文件名称:design.singleton.Singleton.java
* 创建人:Fei Wong
* 创建时间: 2012-06-20
* 电子邮箱:
* 说明:此工厂只生产DocDocument,其他的不生产
* */
public class DocDocumentFactory {
public static DocDocument getDocDocument(){
return new DocDocument() ;
}
}
package design.factorymethod;
/**
* 文件名称:design.singleton.Singleton.java
* 创建人:Fei Wong
* 创建时间: 2012-06-20
* 电子邮箱:
* 说明:工厂调用方法
* */
public class Main {
public static void main(String[] args) {
Document document = DocDocumentFactory.getDocDocument() ;
document.open() ;
document.revert() ;
document.save() ;
document.close() ;
document = TextDocumentFactory.geTextDocument() ;
document.open() ;
document.revert() ;
document.save() ;
document.close() ;
}
}