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