1. 程式人生 > >軟體設計模式——簡單工廠模式(Simple Factory)

軟體設計模式——簡單工廠模式(Simple Factory)

1.工廠模式(靜態工廠模式、工廠方法模式、抽象工廠模式)

(1)引入

話說十年前,有一個暴發戶,他家有三輛汽車——Benz 賓士、Bmw 寶馬、Audi 奧迪,還僱了司機為他開車。不過,暴發戶坐車時總是怪怪的:上 Benz 車後跟司機說“開賓士車!”, 坐上 Bmw 後他說“開寶馬車!”,坐上 Audi 說“開奧迪車!”。你一定說:這人有病!直接說 開車不就行了?!
而當把這個暴發戶的行為放到我們程式設計中來時,會發現這是一個普遍存在的現象。 幸運的是,這種有病的現象在 OO(面向物件)語言中可以避免了。下面就以 Java 語言為 基礎來引入我們本文的主題:工廠模式。

(2)分類

工廠模式主要是為建立物件提供過度介面,以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。
工廠模式主要分為三類:
1)簡單工廠模式
2)工廠方法模式
3)抽象工廠模式
這三種模式從上往下逐步抽象。一般情況下,將簡單工廠模式看作工廠方法的一個特例,將兩者歸為一類。

(3)簡單工廠模式

簡單工廠模式又稱為靜態工廠方法模式,主要由三部分組成:
1)工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由 一個具體類實現。
2)抽象產品角色:它一般是具體產品繼承的父類或者實現的介面。在java中由介面或者抽象類來實現。
3)具體產品角色:工廠類所建立的物件就是此角色的例項。在java中由一個具體類實現。
這裡寫圖片描述

//抽象產品角色
public interface Car {
    public void drive();
}
//具體產品角色
public class Bmw implements Car
{
    @Override
public void drive() { System.out.println("Driving Bmw!"); } } //具體產品角色 public class Benz implements Car { public void drive() { System.out.println("Driving Benz!"); } } ....... //工廠類角色,主要在這裡面建立相應的產品類例項 public class Drive { public static Car driveCar(String s)throws
Exception{ if (s.equalsIgnoreCase("Benz")) { return new Benz(); }else if(s.equalsIgnoreCase("Bmw")){ return new Bmw(); }else if (s.equalsIgnoreCase("Audi")) { return new Audi(); }else { throw new Exception(); } } } //客戶端使用 public class Magnate { public static void main (String [] args) { try { Car car=Drive.driveCar("Benz"); car.drive(); } catch (Exception e) { e.printStackTrace(); } } } 輸出結果:Driving Benz!

下面從開閉原則(對擴充套件開放;對修改封閉)上來分析簡單工廠模式當用戶想要增加一輛車的時候,只要符合抽象產品制定的合同,那麼只要通知工廠類知道就可以被客 戶使用了。所以對產品部分來說,它是符合開閉原則的;但是從工廠部分分析就知道不符合了,因為每增加一輛車,都要在工廠類中增加相應的業務邏輯或者判斷邏輯,這顯然是違背開閉原則 的。可想而知對於新產品的加入,工廠類是很被動的。因此工廠方法模式應運而生,下一篇將詳細講解工廠方法模式。