如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
工厂模式根据调用数据返回某个类的一个实例,此类可能是多个类的某一个类。通常,这些类满足共同的规则(接口)或父类。调用者只关心工厂生产的实例是否满足某种规范,即实现了某个接口;是否可供自己正常调用(调用者仅仅使用)。该模式提供各对象之间清晰的角色划分,降低程序的耦合。接口产生的全部实例通常实现相同接口,接口里定义全部实例共同拥有的方法,这些方法在不同的实现类中实现方式不同。程序调用者无须关心方法的具体实现,从而降低系统异构的代价。下面是工厂模式的示例代码://Person接口定义publicinterfacePerson{/***@paramname对name打招呼*@return打招呼的字符串*/publicStringsayHello(Stringname);/***@paramname对name告别*@return告别的字符串*/publicStringsayGoodBye(Stringname);}该接口定义Person的规范,该接口必须拥有两个方法:能打招呼、能告别。规范要求实现该接口的类必须具有这两个方法://American类实现Person接口publicclassAmericanimplementsPerson{/***@paramname对name打招呼*@return打招呼的字符串*/publicStringsayHello(Stringname){returnname+",Hello";}/***@paramname对name告别*@return告别的字符串*/publicStringsayGoodBye(Stringname){returnname+",GoodBye";}}下面是实现Person接口的另一个实现类:ChinesepublicclassChineseimplementsPerson{/***@paramname对name打招呼*@return打招呼的字符串*/publicStringsayHello(Stringname){returnname+",您好";}/***@paramname对name告别*@return告别的字符串*/publicStringsayGoodBye(Stringname){returnname+",下次再见";}}然后看Person工厂的代码:publicclassPersonFactory{/***获得Person实例的实例工厂方法*@paramethnic调用该实例工厂方法传入的参数*@return返回Person实例*/publicPersongetPerson(Stringethnic){//根据参数返回Person接口的实例。if(ethnic.equalsIgnoreCase("chin")){returnnewChinese();}else{returnnewAmerican();}}}最简单的工厂模式的框架基本如上所示。主程序部分仅仅需要与工厂耦合,而无须与具体的实现类耦合在一起。下面是主程序部分:publicclassFactroyTest{publicstaticvoidmain(String[]args){//创建PersonFactory的实例,获得工厂实例PersonFactorypf=newPersonFactory();//定义接口Person的实例,面向接口编程Personp=null;//使用工厂获得Person的实例p=pf.getPerson("chin");//下面调用Person接口的方法System.out.println(p.sayHello("wawa"));System.out.println(p.sayGoodBye("wawa"));//使用工厂获得Person的另一个实例p=pf.getPerson("ame");//再次调用Person接口的方法System.out.println(p.sayHello("wawa"));System.out.println(p.sayGoodBye("wawa"));}}主程序从Person接口的具体类中解耦出来,而且,程序调用者无须关心Person的实例化过程,角色划分清晰。主程序仅仅与工厂服务定位结合在一起:获得工厂的引用,程序将可获得所有工厂能产生的实例。具体类的变化,重要接口不发生任何改变,调用者程序代码部分几乎无须发生任何改动