简单工厂设计模式

  简单工厂设计模式simple Factory:

package org.xiaolai.factorydemo01;

interface Car{
 public void run();
 public void stop();
}

class Ford implements Car{

 public void run() {
  System.out.println("Ford开始启动了。。。");
  
 }

 public void stop() {
  // TODO Auto-generated method stub
  System.out.println("Ford停止了。。。。");
  
 }
 
}

class Benz implements Car{

 public void run() {
  System.out.println("Benz开始启动了。。。");
 }

 public void stop() {
  System.out.println("Benz停止了。。。。");
 }
 
}

class Factory{
 public static Car getFactoryInstance(){
  return new Benz();
 }
}
public class FactoryDemo01 {

 public static void main(String[] args) {
  
 /* Car c=new Benz();弊端:接口与子类的藕合性强。解决办法:用工厂类管理
  c.run();
  c.stop();
 */
 Car c=Factory.getFactoryInstance();//存在的问题是实例化不同的类要改动工厂类,
         //解决办法见FactoryDemo02
 c.run();
 c.stop();
  
 }

}

package org.xiaolai.factorydemo02;

interface Car{
 public void run();
 public void stop();
}

class Ford implements Car{

 public void run() {
  System.out.println("Ford开始启动了。。。");
  
 }

 public void stop() {
  // TODO Auto-generated method stub
  System.out.println("Ford停止了。。。。");
  
 }
 
}

class Benz implements Car{

 public void run() {
  System.out.println("Benz开始启动了。。。");
 }

 public void stop() {
  System.out.println("Benz停止了。。。。");
 }
 
}

class Factory{
 public static Car getFactoryInstance(String type){
  Car c=null;
  if("Ford".equals(type)){
   c=new Ford();
  }
  if("Benz".equals(type)){
   c=new Benz();
  }
  return c;
 }
}
public class FactoryDemo02 {

 public static void main(String[] args) {

 Car c=Factory.getFactoryInstance("dd");
 //用if语句块解决没有对应匹配的字符串。
 if(c!=null){
  c.run();
  c.stop();
 }else{
  System.out.println("Sorry,本工厂暂时不生产这种类型汽车!");
 }
 //但还存在实际问题:如要扩大规模,就得重新添加修改工厂类,如添加if模块
 //解决办法,请看factorydemo03---->利用java的反射机制。
  
 }

}

package org.xiaolai.factorydemo03;

interface Car{
 public void run();
 public void stop();
}

class Ford implements Car{

 public void run() {
  System.out.println("Ford开始启动了。。。");
  
 }

 public void stop() {
  // TODO Auto-generated method stub
  System.out.println("Ford停止了。。。。");
  
 }
 
}

class Benz implements Car{

 public void run() {
  System.out.println("Benz开始启动了。。。");
 }

 public void stop() {
  System.out.println("Benz停止了。。。。");
 }
 
}

class Toyota implements Car{

 public void run() {
  System.out.println("Toyota开始启动了。。。");
 }

 public void stop() {
  System.out.println("Toyota停止了。。。。");
 }
 
}

class Factory{
 public static Car getFactoryInstance(String type){
  Car c=null;
  try {
   c=(Car)Class.forName("org.xiaolai.factorydemo03."+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 FactoryDemo03 {

 public static void main(String[] args) {

 Car c=Factory.getFactoryInstance("Toyota");
 //用if语句块解决没有对应匹配的字符串。
 if(c!=null){
  c.run();
  c.stop();
 }else{
  System.out.println("Sorry,本工厂暂时不生产这种类型汽车!");
 }
 //解决办法,请看factorydemo03---->利用java的反射机制。
  
 }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值