A-A+

设计模式之工厂方法模式实例

2015年12月25日 站长资讯 暂无评论

工厂方法模式实例模型与上篇简单工厂模式相同,区别在于工厂方法模式对工厂也做了一层抽象,不同的工厂负责不同的产品生产。本例中,Auto的汽车抽象代码并没有改变,贴在下面:

Auto.java

  1. public abstract class Auto{  
  2.     private String name;//车型名称  
  3.     abstract public void run();//抽象的工作方法  
  4.     public String getName(){  //获得车型名称的方法  
  5.         return name;  
  6.     }  
  7.     public void setName(String name){  //设置车型的方法  
  8.         this.name=name;  
  9.     }  
  10. }  

以下是Auto的三个实现类:

Car.java

  1. public class Car extends Auto{  
  2.     public Car(){  
  3.         this.setName("轿车");  
  4.     }  
  5.     @Override  
  6.     public void run(){  
  7.         System.out.println("启动"+this.getName());  
  8.     }  
  9. }  

Bus.java

  1. public class Bus extends Auto{  
  2.     public Bus(){  
  3.         this.setName("巴士");  
  4.     }  
  5.     @Override  
  6.     public void run(){  
  7.         System.out.println("启动"+this.getName());  
  8.     }  
  9. }  

Truck.java

  1. public class Truck extends Auto{  
  2.     public Truck(){  
  3.         this.setName("卡车");  
  4.     }  
  5.     @Override  
  6.     public void run(){  
  7.         System.out.println("启动"+this.getName());  
  8.     }  
  9. }  

下面是工厂的抽象层次代码:

Factory.java

  1. public abstract class Factory{  
  2.     abstract public Auto createAuto();  
  3. }  

该抽象类功能:给具体的工厂实现提供一个抽象,这样客户端就可以依赖此抽象而不用依赖具体的工厂类。具体工厂实现类如下:

CarFactory.java

  1. public class CarFactory extends Factory{  
  2.     @Override  
  3.     public Auto createAuto(){  
  4.         return new Car();  
  5.     }  
  6. }  

BusFactory.java

  1. public class BusFactory extends Factory{  
  2.     @Override  
  3.     public Auto createAuto(){  
  4.         return new Bus();  
  5.     }  
  6. }  

TruckFactory.java

  1. public class TruckFactory extends Factory{  
  2.     @Override  
  3.     public Auto createAuto(){  
  4.         return new Truck();  
  5.     }  
  6. }  

客户端代码:

Client2.java

  1. public class Client2{  
  2.     public static void main(String[] args){  
  3.         Factory factory;  
  4.         Auto auto;  
  5.            
  6.         factory=new CarFactory();  
  7.         auto=factory.createAuto();  
  8.         auto.run();  
  9.         factory=new BusFactory();  
  10.         auto=factory.createAuto();  
  11.         auto.run();  
  12.         factory=new TruckFactory();  
  13.         auto=factory.createAuto();  
  14.         auto.run();  
  15.     }  
  16. }  

运行结果如下:

启动轿车

启动巴士

启动卡车

标签:

给我留言