而當把這個暴發戶的行為放到我們程序設計中來時,會發現這是一個普遍存在的現象。幸運的是,這種有病的現象在OO(面向對象)語言中可以避免了。下面就以Java語言為基礎來引入我們本文的主題:工廠模式。
二、分類
工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。
工廠模式在《Java與模式》中分為三類:
1)簡單工廠模式(Simple Factory)
2)工廠方法模式(Factory Method)
3)抽象工廠模式(Abstract Factory)
這三種模式從上到下逐步抽象,并且更具一般性。
GOF在《設計模式》一書中將工廠模式分為兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract
Factory)。將簡單工廠模式(Simple Factory)看為工廠方法模式的一種特例,兩者歸為一類。
兩者皆可,在本文使用《Java與模式》的分類方法。下面來看看這些工廠模式是怎么來“治病”的。
三、簡單工廠模式
簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用于創建對象的接口。
先來看看它的組成:
1) 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。
2) 抽象產品角色:它一般是具體產品繼承的父類或者實現的接口。在java中由接口或者抽象類來實現。
3) 具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現。
那么簡單工廠模式怎么來使用呢?我們就以簡單工廠模式來改造暴發戶坐車的方式——現在暴發戶只需要坐在車里對司機說句:“開車”就可以了。
//抽象產品角色
public interface Car{
public void drive();
}
//具體產品角色
public class Benz implements Car{
public void drive() {
System.out.println("Driving Benz ");
}
}
public class Bmw implements Car{
public void drive() {
System.out.println("Driving Bmw ");
}
}
。。。(奧迪我就不寫了:P)
//工廠類角色
public class Driver{
//工廠方法.注意 返回類型為抽象產品角色
public static Car driverCar(String s)throws Exception {
//判斷邏輯,返回具體的產品角色給Client
if(s.equalsIgnoreCase("Benz"))
return new Benz();
else if(s.equalsIgnoreCase("Bmw"))
return new Bmw();
......
else throw new Exception();
。。。
//歡迎暴發戶出場......
public class Magnate{
public static void main(String[] args){
try{
//告訴司機我今天坐奔馳
Car car = Driver.driverCar("benz");
//下命令:開車
car.drive();
。。。
將本程序空缺的其他信息填充完整后即可運行。如果你將所有的類放在一個文件中,請不要忘記只能有一個類被聲明為public。本程序在jdk1.4