我想“一切从实例开始”是我最易接受的方式。网上有太多的理论和经验总结,于已而言,吸收亦成乐事。
先看实例,很简单。UML图也懒得画了,更喜欢CRC卡片的方式。
一、简单工厂模式
1. com.cleversoft.designpatterns.simplefactory.Motor.java
package  com.cleversoft.designpatterns.simplefactory;

public   interface  Motor  {
    
public void run();
}

2. com.cleversoft.designpatterns.simplefactory.Bus.java
package  com.cleversoft.designpatterns.simplefactory;

public   class  Bus  implements  Motor  {
    
public Bus() {

    }


    
public void run() {
        System.out.println(
"This is a Bus!");
    }

}

3. com.cleversoft.designpatterns.simplefactory.Car.java
package  com.cleversoft.designpatterns.simplefactory;

public   class  Car  implements  Motor {
    
public Car(){
        
    }

    
public void run(){
        System.out.println(
"This is a Car!");
    }

}

4. com.cleversoft.designpatterns.simplefactory.MotorFactory.java
package  com.cleversoft.designpatterns.simplefactory;

public   class  MotorFactory  {
    
public static Motor factory(String which) {
        
if (which.equalsIgnoreCase("bus")) {
            
return new Bus();
        }
 else if (which.equalsIgnoreCase("car")) {
            
return new Car();
        }

        
return null;
    }

}

5. com.cleversoft.designpatterns.simplefactory.Main.java
package  com.cleversoft.designpatterns.simplefactory;

public   class  Main  {

    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        MotorFactory mf = new MotorFactory();
        Motor m 
= mf.factory("bus");
        m.run();
    }


}

二、工厂方法模式
1. com.cleversoft.designpatterns.factorymethod.MotorFactory.java
package  com.cleversoft.designpatterns.factorymethod;

public   interface  MotorFactory  {
    
public Motor factory();
}

2. com.cleversoft.designpatterns.factorymethod.Motor.java
package  com.cleversoft.designpatterns.factorymethod;

public   interface  Motor  {
    
public void run();
}

3. com.cleversoft.designpatterns.factorymethod.BusFactory.java
package  com.cleversoft.designpatterns.factorymethod;

public   class  BusFactory  implements  MotorFactory {
    
public Motor factory(){
        
return new Bus();
    }

}

4. com.cleversoft.designpatterns.factorymethod.CarFactory.java
package  com.cleversoft.designpatterns.factorymethod;

public   class  CarFactory  implements  MotorFactory {
    
public Motor factory(){
        
return new Car();
    }

}

5. com.cleversoft.designpatterns.factorymethod.Bus.java
package  com.cleversoft.designpatterns.factorymethod;

public   class  Bus  implements  Motor  {
    
public Bus() {

    }


    
public void run() {
        System.out.println(
"This is a Bus!");
    }

}

6. com.cleversoft.designpatterns.factorymethod.Car.java
package  com.cleversoft.designpatterns.factorymethod;

public   class  Car  implements  Motor  {
    
public Car() {

    }


    
public void run() {
        System.out.println(
"This is a Car!");
    }

}

7. com.cleversoft.designpatterns.factorymethod.Main.java
package  com.cleversoft.designpatterns.factorymethod;

public   class  Main  {

    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        MotorFactory mf = new BusFactory();
        Motor m 
= mf.factory();
        m.run();
    }


}

参考资料:
1. http://terrylee.cnblogs.com/archive/2006/01/04/310716.html
2. 《Java与模式》


欢迎大家访问我的个人网站 萌萌的IT人