Java設計模式之工廠模式

2021-09-11 16:22:58 字數 4785 閱讀 7777

1.簡介

工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。使用工廠模式,在建立物件的時候就不需要親自去new了,而是直接交由工廠來建立,就像是乙個老闆需要一批貨,他不是直接親自動手製造這些貨,而是直接告訴工廠自己的需求,然後由工廠製造出這些貨後自己過來取。工廠方法可以遮蔽建立物件的一些細節,也可以對建立的物件做一些增量操作,而這些操作,在客戶端的角度是完全看不到的,客戶端只需要告訴工廠自己需要的類即可。一般認為工廠模式可以分為:簡單工廠模式,工廠方法模式和抽象工廠模式三類

2.簡單工廠模式

簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(static factory method)模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項說白了就是由同乙個工廠去生產不同的產品。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。這裡以乙個簡單生產手機例子作為切入點,詳細講解一下

手機的共同介面:

package com.factory;

/** * 宣告類的共同介面

*/public inte***ce phone

手機的實現類a:「小公尺」手機

package com.factory;

/** * 宣告「小公尺」手機

*/public class miphone implements phone

}

手機的實現類b:「華為」手機

package com.factory;

/** * 宣告「華為」手機

*/public class huaweiphone implements phone

}

簡單工廠類:

package com.factory.******factory;

import com.factory.huaweiphone;

import com.factory.miphone;

import com.factory.phone;

/** * 建立簡單工廠類

*/public class ******factory

if ("huaweiphone".equals(brandname))

return null;

}}

客戶端

package com.factory.******factory;

import com.factory.huaweiphone;

import com.factory.miphone;

import com.factory.phone;

/** * 客戶端

*/public class client

}

簡單工廠方法的總結:

3.工廠方法模式

工廠方法模式是簡單工廠模式的衍生,解決了許多簡單工廠模式的問題。首先完全實現「開放-封閉」原則,實現了可擴充套件。其次更複雜的層次結構,可以應用於產品結果複雜的場合。在工廠方法模式中,建立例項不再是由乙個工廠集中去建立了(注意與簡單工廠的區別:簡單工廠是由乙個工廠去建立不同的產品),而是將具體建立的工作交給子類工廠去做,而自己只提供乙個具體的標準即介面,模擬生產手機的例子,本來小公尺手機和華為手機都是由同乙個富土康流水線工廠來生產的,而現在由於業務調整,富土康流水線不再親自生產各種品牌的手機了,而是只提供了一套標準,具體的生產轉交給了那些專門生產小公尺手機的工廠和專門生產華為手機的工廠,而這些工廠全部都要按照富土康提供的生產標準去執行。

如果要在手機的品牌中新新增乙個「魅族」手機,使用工廠方法模式應該怎麼做呢?

首先需要定義乙個工廠的介面:

package com.factory.factorymethod;

import com.factory.phone;

/** * 工廠的介面

*/public inte***ce factory

定義生產「小公尺」手機的工廠:

package com.factory.factorymethod;

import com.factory.miphone;

import com.factory.phone;

/** * 專門生產小公尺的工廠

*/public class mifactory implements factory

}

定義生產「華為」手機的工廠:

package com.factory.factorymethod;

import com.factory.huaweiphone;

import com.factory.phone;

/** * 專門生產華為手機的工廠

*/public class huaweifactory implements factory

}

如果需要新生產乙個「魅族」手機,則只需要新增乙個魅族生產魅族手機的工廠:

package com.factory.factorymethod;

import com.factory.meizuphone;

import com.factory.phone;

/** * 專門生產魅族手機的工廠

*/public class meizufactory implements factory

}

工廠方法模式的客戶端:

package com.factory.factorymethod;

import com.factory.phone;

/** * 工廠方法模式的客戶端

*/public class client

}

工廠方法模式的總結:

4.抽象工廠模式

現在我們既要生產大螢幕的手機又要生產正常螢幕的手機,該怎麼做呢?

正常螢幕手機的接**們已經有了,現在需要再定義乙個大螢幕手機的介面:

package com.factory;

/** * 定義大螢幕手機的介面

*/public inte***ce bigphone

定義大螢幕的小公尺手機實現類:

package com.factory;

public class mibigphone implements bigphone

}

定義大螢幕的華為手機的實現類:

package com.factory;

public class huaweibigphone implements bigphone

}

定義抽象工廠的共同介面:

package com.factory.abstractfactorymethod;

import com.factory.bigphone;

import com.factory.phone;

public inte***ce factory

定義專門生產小公尺手機的工廠:

package com.factory.abstractfactorymethod;

import com.factory.bigphone;

import com.factory.mibigphone;

import com.factory.miphone;

import com.factory.phone;

/** * 宣告專門生產小公尺手機的工廠

*/public class mifactory implements factory

// 生產大螢幕大尺寸的手機

@override

public bigphone createbigphone()

}

定義專門生產華為手機的工廠:

package com.factory.abstractfactorymethod;

import com.factory.bigphone;

import com.factory.huaweibigphone;

import com.factory.huaweiphone;

import com.factory.phone;

/** * 宣告專門生產華為手機的工廠

*/public class huaweifactory implements factory

// 生產大螢幕手機的方法

@override

public bigphone createbigphone()

}

抽象工廠模式的客戶對端:

package com.factory.abstractfactorymethod;

import com.factory.bigphone;

import com.factory.phone;

/** * 抽象工廠方法的客戶端

*/public class client

}

抽象工廠模式中我們可以定義實現不止乙個介面,乙個工廠也可以生成不止乙個產品類,抽象工廠模式較好的實現了「開放-封閉」原則,是三個模式中較為抽象,並具一般性的模式

java設計模式之工廠模式

工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某乙個類的例項,通常這一組類有乙個公共的抽象父類或者是介面並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義乙個父類或者介面,該類的子類通過不同的方法實現了父類中的方法。然後需要定義乙個工...

java設計模式之工廠模式

1 只要方法裡面控制產生物件的方法,就可稱為工廠相關方法。2 單例 多例。3 簡單工廠 例子 交通工具 多種交通工具 多種交通工具不同的生產過程 4 介面抽象類使用 一般乙個特性使用介面 會飛的 大概能定義為乙個物體使用抽象類 由於類的多繼承性,建議多用介面。5 抽象工廠 換掉一些列的產品,擴充套件...

java設計模式之工廠模式

工廠模式包括工廠方法模式和抽象工廠模式兩種。實際是將介面的例項建立交給乙個工廠類來做。1.工廠方法模式 又包括普通工廠模式 多方法工廠模式 靜態工廠模式三種設計方式。例如 介面 public inte ce father 實現類public class child1 implements fathe...