轉自:http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html
實例1:
//定義接口
interface Car{
public void run();
public void stop();
}
//具體實現類
class Benz implements Car{
public void run(){
System.out.println("Benz開始啓動了。。。。。");
}
public void stop(){
System.out.println("Benz停車了。。。。。");
}
}
//具體實現類
class Ford implements Car{
public void run(){
System.out.println("Ford開始啓動了。。。");
}
public void stop(){
System.out.println("Ford停車了。。。。");
}
}
//工廠
class Factory{
public static Car getCarInstance(){
return new Ford();
}
}
public class FactoryDemo01 {
public static void main(String[] args) {
Car c=Factory.getCarInstance();
c.run();
c.stop();
}
}
實例二:
//定義接口
interface Car{
public void run();
public void stop();
}
//具體實現類
class Benz implements Car{
public void run(){
System.out.println("Benz開始啓動了。。。。。");
}
public void stop(){
System.out.println("Benz停車了。。。。。");
}
}
class Ford implements Car{
public void run(){
System.out.println("Ford開始啓動了。。。");
}
public void stop(){
System.out.println("Ford停車了。。。。");
}
}
//工廠
class Factory{
public static Car getCarInstance(String type){
Car c=null;
if("Benz".equals(type)){
c=new Benz();
}
if("Ford".equals(type)){
c=new Ford();
}
return c;
}
}
public class FactoryDemo02 {
public static void main(String[] args) {
Car c=Factory.getCarInstance("Benz");
if(c!=null){
c.run();
c.stop();
}else{
System.out.println("造不了這種汽車。。。");
}
}
}
實例三:
public void run();
public void stop();
}
class Benz implements Car{
public void run(){
System.out.println("Benz開始啓動了。。。。。");
}
public void stop(){
System.out.println("Benz停車了。。。。。");
}
}
class Ford implements Car{
public void run(){
System.out.println("Ford開始啓動了。。。");
}
public void stop(){
System.out.println("Ford停車了。。。。");
}
}
class Toyota implements Car{
public void run(){
System.out.println("Toyota開始啓動了。。。");
}
public void stop(){
System.out.println("Toyota停車了。。。。");
}
}
class Factory{
public static Car getCarInstance(String type){
Car c=null;
try {
c=(Car)Class.forName("org.jzkangta.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.getCarInstance("Toyota");
if(c!=null){
c.run();
c.stop();
}else{
System.out.println("造不了這種汽車。。。");
}
}
}
對比三個實例:
實例一,雖然實現了簡單工廠,但每次只能得到一種汽車,如果我們想換一種,就得修改工廠,太不方便,而實例二則改變了這種情況,便得我們可以按照我們的需要更換汽車,但我們所更換的汽車必須是實現類中有的,如果我們想要增加一種汽車的時候,我們還是得更改工廠,通過改進,實例三利用反射機制,得到汽車類型,這樣當我們需要增加一種新的汽車時,就無需要再修改工廠,而只需要增加要實現的類即可。也就是說要增加什麼樣的汽車直接增加這個汽車的類即可,而無需改變工廠。從而達到了工廠分離的效果。