为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

简单工厂模式

2017-09-25 12页 doc 29KB 17阅读

用户头像

is_009226

暂无简介

举报
简单工厂模式简单工厂模式 功能: 简单工厂模式又称静态工厂模式,用来实例化目标类的静态类。 实例: a、说明: 1 、(接口)汽车 Car 里有 2 个抽象方法 开车 停车 2 、造一个奔驰 Benz 1 )实现 Car 接口 2 )覆盖 car 的抽象方法 开车 停车 3 、再造一个伏特车 Ford 同样实现 car 接口和覆盖接口的方法 4 、实例化对象 5 、弊端 /******************************/ // 调用奔驰 Car b...
简单工厂模式
简单工厂模式 功能: 简单工厂模式又称静态工厂模式,用来实例化目标类的静态类。 实例: a、说明: 1 、(接口)汽车 Car 里有 2 个抽象方法 开车 停车 2 、造一个奔驰 Benz 1 )实现 Car 接口 2 )覆盖 car 的抽象方法 开车 停车 3 、再造一个伏特车 Ford 同样实现 car 接口和覆盖接口的方法 4 、实例化对象 5 、弊端 /******************************/ // 调用奔驰 Car benz = new Benz(); benz.run(); // 调用伏特 Car ford = new Ford(); ford.run(); /******************************/ 都要使用 Car 不论奔驰和伏特都与 Car 紧密耦合了,,,, 6 、中间加一个工厂类 专门为客户端实例化一个对象 /******************************/ // 加一个工厂类,为客户端实例化一个对象 class Factory{ // public static Car getCarInstance(){ //return new Benz(); // 实例化伏特 return new Ford(); } } /******************************/ 7 、 main 方法既要实例化奔驰,又要实例化伏特 修改静态工厂的方法,给它添加参数 8 、如果用户希望工厂能创造用户想要的汽车,输入参数在工厂中没有 则要增加一个对实例对象的判断; 空指针 9 、如果又扩充子类而不用去修改工厂的办法 用 java 的反射机制替换 if 判断 Class.forName( designPatterns.factorydemo3. +type).newInstance() 然后强制转化为 Car 型 Car c=null; try { c = (Car)Class.forName( designPatterns.factorydemo3. +type).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return c; b、代码1 ******************************************************* package designPatterns.factorydemo.simplefactory; //车类型 interface Car{ public void run();; public void stop();; } //第一种车 class Benz implements Car{ public void run(){ System.out.println( 奔驰开动了~ ); } public void stop(){ System.out.println( 奔驰停了~ ); } } //第二种车 class Ford implements Car{ public void run(){ System.out.println( 伏特开动了~ ); } public void stop(){ System.out.println( 伏特停了~ ); } } //加一个工厂类,为客户端实例化一个对象 class Factory{ // public static Car getCarInstance(){ //return new Benz(); //实例化伏特 return new Ford(); } } public class SimpleFactorydemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub /** * 没有使用工厂模式时,即没有添加工厂类Factory时*/ //错误的 //Benz benz = new Benz(); //benz.run(); //调用奔驰 //Car benz = new Benz(); //benz.run(); ////调用伏特 //Car ford = new Ford(); //ford.run(); // /** * 添加了Factory类后*/ Car benz = Factory.getCarInstance(); benz.run(); benz.stop(); //客户端不能选择 } } ******************************************************** c、代码2: 如果用户希望工厂能创造用户想要的汽车,输入参数在工厂中没有 则要增加一个对实例对象的判断; ******************************************************* package designPatterns.factorydemo2; //车类型 interface Car{ public void run();; public void stop();; } //第一种车 class Benz implements Car{ public void run(){ System.out.println( 奔驰开动了~ ); } public void stop(){ System.out.println( 奔驰停了~ ); } } //第二种车 class Ford implements Car{ public void run(){ System.out.println( 伏特开动了~ ); } public void stop(){ System.out.println( 伏特停了~ ); } } //加一个工厂类,为客户端实例化一个对象 class Factory{ // public static Car getCarInstance(String type){ //return new Benz(); //实例化伏特 //return new Ford(); Car c=null; if(type.endsWith( Benz )) c= new Benz(); else if(type.endsWith( Ford )) c= new Ford(); return c; } } public class SimpleFactorydemo2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Car benz = Factory.getCarInstance( Benz ); benz.run(); benz.stop(); Car ford = Factory.getCarInstance( Ford ); ford.run(); ford.stop(); //如果创建一个自己的车,则要判断工厂里面是否有 Car me = Factory.getCarInstance( adfjakljf ); if(me!=null) { me.run(); me.stop(); } else{ System.out.println( 造不了这种类型的车 ); } } } ******************************************************* e、代码3:利用java的反射机制来 解决扩充子类不去修改工厂 ******************************************************** package designPatterns.factorydemo3; //车类型 interface Car{ public void run();; public void stop();; } //第一种车 class Benz implements Car{ public void run(){ System.out.println( 奔驰开动了~ ); } public void stop(){ System.out.println( 奔驰停了~ ); } } //第二种车 class Ford implements Car{ public void run(){ System.out.println( 伏特开动了~ ); } public void stop(){ System.out.println( 伏特停了~ ); } } //扩充的车 class Toyoto implements Car{ public void run(){ System.out.println( 丰田开动了~ ); } public void stop(){ System.out.println( 丰田停了~ ); } } //加一个工厂类,为客户端实例化一个对象 class Factory{ // public static Car getCarInstance(String type){ //return new Benz(); //实例化伏特 //return new Ford(); //Car c=null; //if(type.endsWith( Benz )) //c= new Benz(); //else if(type.endsWith( Ford )) //c= new Ford(); //return c; Car c=null; try { c = (Car)Class.forName( designPatterns.factorydemo3. +type).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return c; } } public class SimpleFatorydemo3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //如果创建一个自己的车,则要判断工厂里面是否有 Car me = Factory.getCarInstance( Toyoto ); if(me!=null) { me.run(); me.stop(); } else{ System.out.println( 造不了这种类型的车 ); } } } *******************************************************
/
本文档为【简单工厂模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索