1. 程式人生 > >建立型模式之三——抽象工廠模式

建立型模式之三——抽象工廠模式

模式動機

在工廠方法模式中具體工廠負責生成具體的產品,每一個具體產品對應一種具體產品,工廠方法也具有唯一性,一般情況下,一個具體工廠中只有一個工廠方法或一組過載的工廠方法。但是有的時候我們需要一個工廠可以提供多個產品物件,而不是單一的產品物件,如一個電器裝置工廠,它可以生產電視機、電冰箱、空調等裝置,而不只是生產某種型別的電器。為了更清晰地理解抽象工廠模式,需要引入兩個概念:

  • 產品等級結構:產品等級結構即產品的繼承結構,如一個抽象類是電視機,其子類有海爾電視機、海信電視機、TCL電視機等,那麼抽象電視機和具體品牌的電視機之間構成了一個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。
  • 產品族:在抽象工廠模式中,產品族是指由同一工廠生產的,位於不同產品等級結構中的一組產品。如海爾工廠生產海爾電視、海爾冰箱等。

模式定義

抽象工廠模式(Abstract Factory Pattern):提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。抽象工廠模式又稱為Kit模式,屬於物件建立型模式。

模式結構

抽象工廠模式結構圖如圖所示:
這裡寫圖片描述
1.AbstractFactory(抽象工廠)
抽象工廠用於宣告生產抽象產品的方法,在一個抽象工廠中可以定義一組方法,每一個方法對應一個產品等級結構。
2.ConcreteFactory(具體工廠)
具體工廠實現了抽象工廠宣告的生產抽象產品的方法,生產一組具體方法,這些產品構成一個產品族,每一個產品都位於某個產品等級結構中。
3.AbstractProduct(抽象產品)
抽象產品為每種產品宣告介面,在抽象產品中定義了產品的抽象業務方法。
4.ConcreteProduct(具體產品)
具體產品定義具體工廠生產的具體產品物件,實現抽象產品介面定義中的業務方法。

例項

一個電器工廠可以生產多種型別的電器,如海爾工廠可以生產海爾電視機,海爾空調等,TCL工廠也可以生產對應的電器。
如圖是該例項類圖。
這裡寫圖片描述

// 抽象產品類
public interface Television {
    public void play();
}

public interface AirConditioner {
    public void changeTemperature();
}

// 具體產品類
public class HaierTelevision implements Television {
    public void play() {
        System.out.println("海爾電視機播放中."
); } } public class TCLTelevision implements Television { public void play() { System.out.println("TCL電視機播放中."); } } public class HaierAirConditioner implements AirConditioner { public void changeTemperature() { System.out.println("海爾空調控溫中"); } } public class HaierAirConditioner implements AirConditioner { public void changeTemperature() { System.out.println("TCL空調控溫中"); } } // 抽象工廠類 public interface EFactory { public Television produceTelevision(); public AirConditioner produceAirConditioner(); } // 具體工廠類 public class HaierFactory implements EFactory { public Television produceTelevison() { return new HaierTelevision(); } public AirConditioner produceAirConditioner { return new HaierAirConditioner(); } } public class TCLFactory implements EFactory { public Television produceTelevison() { return new TCLTelevision(); } public AirConditioner produceAirConditioner { return new TCLAirConditioner(); } } // 測試 public class Client { public static void main(String[] args) { Televison tv; AirConditioner airConditioner; EFactory factory = new HaierFactory(); tv = factory.produceTV(); airConditioner = factory.produdeAirConditioner(); tv.play(); airConditioner.changeTemperature(); } }

相關推薦

建立模式——抽象工廠模式

模式動機 在工廠方法模式中具體工廠負責生成具體的產品,每一個具體產品對應一種具體產品,工廠方法也具有唯一性,一般情況下,一個具體工廠中只有一個工廠方法或一組過載的工廠方法。但是有的時候我們需要一個工廠可以提供多個產品物件,而不是單一的產品物件,如一個電器裝置工

C#設計模式抽象工廠模式(AbstractFactory)【創建

抽象 抽象工廠 album 代碼 ctf bst actor 抽象工廠模式 .cn 一、引言 寫了3篇有關設計模式的文章了,大家有了些反饋,說能從中學到一些東西,我感到很欣慰,那就繼續努力。今天我要寫第四個模式了,該模式叫抽象工廠。上一篇文章我們講了【工廠方法】模式,它是為

Java設計模式工廠模式 -- 總是忘記,這次把你記下來!

}   interfaceIProduct1 {   public void show(); } interfaceIProduct2 {   public void show(); } classProduct1 implements IProduct1 {   public void show() {

C#設計模式3——抽象工廠模式

宣告:本文章參考引用《C#設計模式》(科學出版社)一書。 抽象工廠(Abstract Factory)模式,是比工廠模式更高一層的抽象。在希望返回物件的幾個相關類中的一個時,可以使用該模式,每個類都能夠根據需要返回幾個不同的物件。換句話說,抽象工廠是一個工廠物件,其

設計模式工廠方法模式—多工廠的實現

簡單工廠的嚴重問題: 當系統中需要引進新產品時,靜態工廠方法通過所傳入引數的不同來建立不同的產品,這必定要修改工廠類的原始碼,違背了開閉原則 引入工廠方法模式: 針對不同的產品提供不同的工廠 定義: 定義一個用於建立物件的介面,讓子類決定將 哪一個類例項化,工廠方法迷失

設計模式系列工廠模式(Factory Pattern)

這是本系列的第三篇部落格,這次主要來說一下工廠模式。 基本工廠模式 簡單來說工廠模式是將工程中的相同型別物件的建立活動集中管理,一般通過反射來生成外界需要的實體類。比如Spring中的容器Bean概念,通過Spring BeanFactory來產生不同的Be

設計模式筆記10: 抽象工廠模式

alt 模式 我們 apps 子類 工廠 相互 依賴對象 img 1.1  定義   提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。

c++ 設計模式簡單的工廠模式

urn ret 應用程序 on() name clu get actor new 調試環境:vs2010 // test0.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <iostream>

設計模式工廠模式

初始化 重要 不能 還需 new 不同 參數 裏的 作用 概述: 屬於創建型設計模式,需要生成的對象叫做產品 ,生成對象的地方叫做工廠 。 使用場景: 在任何需要生成復雜對象的地方,都可以使用工廠方法模式。 直接用new可以完成的不需要用工廠模式 下面將介紹五種工廠

java設計模式-----3、抽象工廠模式

log 情況下 屬於 運行 title nds 們的 println 支持   抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況

Java的設計模式 簡單的工廠模式(二)

attack reat nds public create mark mar ace cto 下面的代碼是稍微改進後的工廠模式 abstract class MoveAble{ public abstract void run(); } abstract c

設計模式工廠模式

簡單工廠模式違反了開放—封閉原則,工廠模式解除了其弊端 工廠方法模式,定義一個建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到子類 簡單工廠模式用switchcase在一個類中,建立相應的類,工廠模式是為每一個類建立一個例項化該類的類,例如OperationAdd

設計模式禪(4)-工廠模式

文章目錄 一、簡單工廠模式 1.1、單一new方式 1.2、簡單工廠模式 二、抽象工廠及工廠方法 2.1、將簡單工廠改造成抽象工廠 2.2、為抽象工廠

設計模式學習筆記-抽象工廠模式

工廠方法模式是為了克服簡單工廠模式的缺點而設計出來的,簡單工廠模式的工廠類隨著產品類的增加需要增加額外的程式碼),而工廠方法模式每個具體工廠類只完成單個例項的建立,所以它具有很好的可擴充套件性。。但是在現實生活中,一個工廠只建立單個產品這樣的例子很少 定義: 抽象工廠(Abstract Fa

大話設計模式筆記——工廠模式對比

簡單工廠模式:建立一個工廠類,在類中通過具體條件選擇例項化哪個類。 工廠方法模式:定義一個用於建立物件的介面,讓子類決定例項化哪一個類。 抽象工廠模式:提供一個建立一系列相關物件的介面,而無需指定他們具體的類。  舉個例子說明這三個模式,目前有一個User類,它有兩

【設計模式】單例模式工廠模式

interface IFactory { Operation CreateOperation(); } class AddFactory : IFactory { public Operation CreateOperation()

設計模式—淺析工廠模式的特點

前言   簡單工廠模式,工廠方法模式和抽象工廠模式都是屬於建立型設計模式,並且這三種建立型模式都不需要知道具體類,我們需要掌握的是一種思想,就是在建立一個物件時,需要把容易發生變化的地方給封裝起來,來

java設計模式學習筆記--抽象工廠模式

1. 什麼是抽象工廠模式 抽象工廠模式提供一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。 也就是說抽象工廠模式是用來 建立產品的家族的。 為了理解這個定義,我們先要搞清楚什麼是產品的家族。 那麼什麼是產品的家族哪,我的理解就是一群相

【設計模式學習】抽象工廠模式

cpp學習抽象工廠模式; 在學習抽象工廠模式之前,先來回憶一下上一節學習的工廠方法模式; 工廠方法模式,採用多型分離的方法,將簡單工廠模式的工廠類解放為多個具體的子工廠, 從而繼承簡單工廠模式的優點,解決簡單工廠模式的缺點; 工廠方法模式的缺點:在增加

工廠模式三部曲-抽象工廠模式

什麼是抽象工廠模式 簡單瞭解一下 按照慣例,我們先了解一下什麼是抽象工廠模式。抽象工廠模式和工廠方法模式很相似,但是抽象工廠模式將抽象發揮的更加極致,是三種工廠模式中最抽象的一種設計模式。抽象工廠模式,也叫做Kit模式,提供了建立一系列相關抽象子類的介面,而無需指定它們具體的型別。 抽象工廠模式中定