A-A+
	设计模式之工厂方法模式实例
工厂方法模式实例模型与上篇简单工厂模式相同,区别在于工厂方法模式对工厂也做了一层抽象,不同的工厂负责不同的产品生产。本例中,Auto的汽车抽象代码并没有改变,贴在下面:
Auto.java
- public abstract class Auto{
 - private String name;//车型名称
 - abstract public void run();//抽象的工作方法
 - public String getName(){ //获得车型名称的方法
 - return name;
 - }
 - public void setName(String name){ //设置车型的方法
 - this.name=name;
 - }
 - }
 
以下是Auto的三个实现类:
Car.java
- public class Car extends Auto{
 - public Car(){
 - this.setName("轿车");
 - }
 - @Override
 - public void run(){
 - System.out.println("启动"+this.getName());
 - }
 - }
 
Bus.java
- public class Bus extends Auto{
 - public Bus(){
 - this.setName("巴士");
 - }
 - @Override
 - public void run(){
 - System.out.println("启动"+this.getName());
 - }
 - }
 
Truck.java
- public class Truck extends Auto{
 - public Truck(){
 - this.setName("卡车");
 - }
 - @Override
 - public void run(){
 - System.out.println("启动"+this.getName());
 - }
 - }
 
下面是工厂的抽象层次代码:
Factory.java
- public abstract class Factory{
 - abstract public Auto createAuto();
 - }
 
该抽象类功能:给具体的工厂实现提供一个抽象,这样客户端就可以依赖此抽象而不用依赖具体的工厂类。具体工厂实现类如下:
CarFactory.java
- public class CarFactory extends Factory{
 - @Override
 - public Auto createAuto(){
 - return new Car();
 - }
 - }
 
BusFactory.java
- public class BusFactory extends Factory{
 - @Override
 - public Auto createAuto(){
 - return new Bus();
 - }
 - }
 
TruckFactory.java
- public class TruckFactory extends Factory{
 - @Override
 - public Auto createAuto(){
 - return new Truck();
 - }
 - }
 
客户端代码:
Client2.java
- public class Client2{
 - public static void main(String[] args){
 - Factory factory;
 - Auto auto;
 - factory=new CarFactory();
 - auto=factory.createAuto();
 - auto.run();
 - factory=new BusFactory();
 - auto=factory.createAuto();
 - auto.run();
 - factory=new TruckFactory();
 - auto=factory.createAuto();
 - auto.run();
 - }
 - }
 
运行结果如下:
启动轿车
启动巴士
启动卡车