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