1. 程式人生 > >簡單工廠,工廠模式,抽象工廠

簡單工廠,工廠模式,抽象工廠

學習了一下關於工廠的設計模式,寫個例子整理一下,例子是生產不同廠商的滑鼠,可能不太合適,記錄一下想法。

1.簡單工廠

這個模式在factory裡面動態選擇使用哪個類

public class Factory {
  public static Made getMade(String o) {
    Made made = null;
    switch (o) {
      case "logutech":
        made = new LogitechMade();
        break;
      case "lenovo":
        made = new
LenovoMade(); break; default: made = new LogitechMade(); } return made; } }

Made類是一個抽象類,規定了製作的方法。

public abstract class Made {
  public abstract void made();
}

在工廠中通過客戶端傳入的需求,例項化不同的made物件。兩個廠商的made類繼承自Made類。另一個相同,重寫抽象類的生產方法

public class LogitechMade extends Made {
@Override public void made() { System.out.println("logutech made mouse"); } }

接下來是main客戶端

public class Main {

  public static void main(String[] args) {
    Made made = Factory.getMade("lenovo");
    made.made();
  }
}

首先宣告一個Made的例項物件,從factory裡面獲得,根據使用者數需求例項化不同的廠商made物件,然後例項物件執行made製造方法,就製造了相應廠商的滑鼠。
這就是簡單工廠模式。
專案結構截圖
這裡寫圖片描述

2.工廠模式

通過觀察,簡單工廠擴充套件性很差,每次增加廠商都要修改工廠類factory。工廠模式來解決,工廠模式只是增強了可擴充套件性,為每個生產類增加了一個工廠,類的數量增多,工廠類factory負擔減少。

首先是工廠類,這裡做成抽象類,減輕負擔,只規定了一個獲得生產方法的方法。

public abstract class AbstractFactory {
  public abstract Made getMade();
}

然後每個廠商都有一個工廠類,繼承自這個抽象的工廠類。重寫獲取製造方法的方法,這裡由於就是羅技的工廠,所以在獲取製造方法的方法裡直接返回與簡單工廠相同的類LogitechMade。這個類也是繼承自Made類,這裡與簡單工廠相同。

public class LogutechFactory extends AbstractFactory {
  @Override
  public Made getMade() {
    return new LogitechMade();
  }
}

剩下的類基本與簡單工廠一樣,接下來是mian。宣告一個AbstractFactory的引用,申請為LogitechFactory,這樣factory就是LogitechFactory的factory。然後從這個factory裡面獲得made製造方法,然後呼叫made.made方法。就是呼叫的LogitechMade的製造方法,製造出的就是Logitech的滑鼠。

public class Main {

  public static void main(String[] args) {
    AbstractFactory factory = new LogitechFactory();
    Made made = factory.getMade();
    made.made();
  }
}

工廠模式就是為每個執行方法的類做一個工廠,這樣達到了便於擴充套件的目的。
專案的截圖:
這裡寫圖片描述

3.抽象工廠

然後是每個廠商不只是生產滑鼠,還要生產鍵盤,涉及到產品族的問題,就要用到抽象工廠。
這裡想放上專案的結構的截圖:
這裡寫圖片描述

Mouse類:類似於之前的Made類,為抽象類,有一個製作滑鼠的方法,Keyboard與這個相同。

public abstract class Mouse {
  public abstract void MouseMade();
}

LogitechMouseMade為具體的生產類,繼承Mouse類,重寫mousemade方法,made包下的製造類分貝繼承device包下的類。

public class LogitechMouseMade extends Mouse {
  @Override
  public void MouseMade() {
    System.out.println("LogitechMouse");
  }
}

這裡的工廠增加了獲取製造鍵盤的的方法的抽象方法。

public abstract class AbstractFactory {
  public abstract Mouse madeMouse();
  public abstract Keyboard madeKeyboard();
}

具體廠商的工廠繼承抽象工廠,重寫方法:在方法中呼叫相應的類。

public class LogitechFactory extends AbstractFactory {
  @Override
  public Mouse madeMouse() {
    return new LogitechMouseMade();
  }

  @Override
  public Keyboard madeKeyboard() {
    return new LogitechKeyboardMade();
  }
}

main:還是獲得一個羅技的工廠,呼叫羅技工廠的做滑鼠方法和做鍵盤方法,就製作出來了。

public class Main {

  public static void main(String[] args) {
    AbstractFactory factory = new LogitechFactory();
    Mouse mouse = factory.madeMouse();
    Keyboard keyboard = factory.madeKeyboard();
    mouse.MouseMade();
    keyboard.KeyboardMade();
  }
}

3種模式各有利弊,在不同的情況用不同的方式,使程式碼易維護,可擴充套件。

相關推薦

簡單工廠模式工廠模式抽象工廠的區別

簡單工廠模式簡單工廠模式不是23種裡的一種,簡而言之,就是有一個專門生產某個產品的類。比如下圖中的滑鼠工廠,專業生產滑鼠,給引數0,生產戴爾滑鼠,給引數1,生產惠普滑鼠。工廠模式工廠模式也就是滑鼠工廠是個父類,有生產滑鼠這個介面。戴爾滑鼠工廠,惠普滑鼠工廠繼承它,可以分別生產

關於js的設計模式簡單工廠模式構造函數模式原型模式混合模式動態模式

nod nodejs 重新 作用域 this 一次 無法 typeof 訪問 <1>工廠模式 簡單來說就是封裝後的代碼,簡單的工廠模式是很好理解的,關於它的作用,就是利用面向對象的方法,把一些對象封裝,使一些占用空間多的,重復的代碼封裝起來。實現方法非常簡單,也

java中幾種設計模式(單例模式介面卡模式簡單工廠模式

1、單例模式:也分餓漢式單例模式(建立物件)與懶漢式單例模式(未建立物件)程式碼實現:餓漢式單例模式:懶漢式單例模式:2、介面卡模式:介面:實現介面的類:實現介面某個方法的類:3、簡單工廠模式:介面:類1:類2:工廠類:測試類:

23種設計模式抽象工廠模式(建立型2 AbstractFactoryc++實現)

#include<stdlib.h>#include<stdio.h>#include<iostream>usingnamespace std;classFruit {public:virtual void sayName() = 0;};

設計模式抽象工廠模式結合類圖秒懂!

通過前篇文章《設計模式:工廠模式,解除耦合的利器》的介紹,我們對工廠模式有了深入的瞭解,今天繼續介紹一種特殊的工廠模式,也就是抽象工廠模式。 定義 抽象工廠模式:提供一個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬於物件建立型模式,是工廠方法模式的升級版,在

Note8:C#設計模式工廠方法模式(VS 簡單工廠模式 & 抽象工廠模式

工廠方法模式 blog 抽象工廠 nbsp strong str cnblogs note 設計 一、資源說明 (1)本文有參考:http://www.cnblogs.com/zhili/p/FactoryMethod.html 待更!Note8:C#設計模式—工廠方法

【JS設計模式】溫習簡單工廠模式工廠方法模式抽象工廠模式概念

his mac script 開頭 str new 每一個 簡單工廠 pattern 註:空心箭頭表示的是種繼承關系,工廠類和產品類之間是一種依賴關系。是用箭頭加虛線表示的,以下的模型圖是用的實線是不正確(時間不夠用,在這裏我偷懶了。這個習慣不好,呵呵)簡單工廠模式(S

簡單工廠模式工廠模式抽象工廠模式

alt 缺陷 關心 display img ret blog readline == 1.簡單工廠模式:調用類只需要向工廠類請求方法,由工廠決定創建出哪個類的實例,而不需要關心被調用類的實現過程。 優勢:調用類 和 被調用類分離,調用類需要時只需要向工廠請求,避免了調用類

簡單工廠模式工廠模式抽象工廠模式區別

下面例子中滑鼠,鍵盤,耳麥為產品,惠普,戴爾為工廠。 簡單工廠模式(面向單個產品,不符合開閉原則,要點:產品面向介面) 簡單工廠模式不是 23 種裡的一種,簡而言之,就是有一個專門生產某個產品的類。 比如下圖中的滑鼠工廠,專業生產滑鼠,給引數 0,生產戴爾滑鼠,給引數

簡單工廠工廠模式抽象工廠

  工廠可以分為三種:簡單工廠、工廠模式和抽象工廠,三者的關係是遞進的,以做包子為例,剛開始只有兩種包子:豆腐包和牛肉包,可以使用簡單工廠(或者叫靜態工廠)來解決,隨著包子種類的越來越多,發現沒新增一種包子,就需要改工廠類,擴充套件性太差,因此出現了工廠模式,提取一個公共的做包子介面,然後針對每一種包子建一個

設計模式學習 ——簡單工廠模式工廠模式抽象工廠模式

【轉】設計模式學習(二)——簡單工廠模式、工廠模式、抽象工廠模式 最近抽時間將之前看過的“程式人生”公眾號推送的一篇工廠模式的介紹進行了實踐,為了加深自己理解,特將自己的學習理解記錄於此。初識設計模式,就被設計模式的精妙深深吸引,感覺脫離設計模式的程式碼就失去了美麗。作為一個測試,平日寫程式碼的機會肯定不如開

設計模式學習總結(1)簡單工廠模式工廠方法模式抽象工廠模式

設計模式學習 做了幾個專案,發現設計模式的好處還是很多的,這東西就是隻有你真正用到的時候才知道他的好處,否則學了也不知道所以然。所以設計模式學習我認為可以在先進行幾個專案後,再來學習,這樣學習的效果和感受才是最好的。 這次是做一個學習的筆記,內容還是主要以我看的兩本書《大

設計模式工廠模式工廠方法模式簡單工廠模式抽象工廠模式

工廠模式 工廠模式是最常用的設計模式之一,這種型別的設計模式屬於建立設計模式,它提供了一種建立物件的最佳方式。 優點:1、一個呼叫者想建立一個物件,只要知道其名稱就可以了。 2、擴充套件性高,如果想要增加多一個產品,只要擴充套件一個工廠類就可以了。 3、隱蔽產品的具體實現,呼叫者只要關係產品的介面。 程

介面設計模式---工廠設計模式簡單工廠模式工廠方法模式抽象工廠模式)代理模式

介面設計模式-------工廠設計模式 工廠設計模式分為簡單設計模式和工廠設計模式。 簡單工廠模式 不想把new 放在主方法 專門定義一個類(第三方)用來建立其他類例項(解耦:抽取出來 ,將客戶端建立物件的操作解耦到外部第三方類),被建立的例項通常具有共同

簡單工廠模式工廠方法模式抽象工廠模式的發展過程

簡單工廠模式結構圖: 工廠方法模式結構圖: 抽象工廠模式結構圖: 從上面三張圖的發展可以看出: 簡單工廠模式將產品物件建立過程進行收攏,統一由工廠方法輸出;存在的問題就是工廠方法內部邏輯存在大量的if-else語句;不符合開閉原則和單一職責原則 然後發展了工廠方法模式,定義

筆記十三:設計模式簡單工廠模式工廠方法模式抽象工廠模式

引言: 假設現在有一個超市(Market),超市銷售餅乾(Biscuit)、水果(Fruit)、飲料(Drink)三種食品。 按照常規,我們建立三個類:class Biscuit、class Fruit、class Drink。 class Bis

iOS 三種工廠模式(簡單工廠模式工廠模式抽象工廠模式)

原文轉載 說明:在我理解中,這裡所謂的抽象,其實就是制定某一個介面規範。具體體現在程式碼裡,就是設定一個基類,基類遵守某一套介面規範,但是其具體的實現則通過子類化來完成。當然,這裡我們也可以使用協議來規範這套介面規範。相對的,具體就是具有對抽象做子類化之後產生的實體。 1

簡單工廠模式工廠方法模式抽象工廠模式 之間的對比

先看各自的結構: 簡單工廠模式(SimpleFactory Mode):     簡單工廠模式的思路是,首先我們把一些共性的東西(演算法)拿出來,進行抽象,比如加減乘除。然後我們在定義一個類作為工廠類,工廠類的作用就是根據傳過來的字串或者其他Key值給返回一個相對應的演算

簡單工廠模式工廠方法模式抽象工廠模式 、策略模式及策略與工廠之間的區別

一.前言   話說十年前,有一個爆發戶,他家有三輛汽車(Benz(賓士)、Bmw(寶馬)、Audi(奧迪)),還僱了司機為他開車。不過,爆發戶坐車時總是這樣:上Benz車後跟司機說“開賓士車!”,坐上Bmw後他說“開寶馬車!”,坐上 Audi後他說“開奧迪車!”。 你一定說:這人有病!

淺談簡單工廠模式工廠方法模式抽象工廠模式

淺談簡單工廠模式、工廠方法模式、抽象工廠模式 一、概述 簡單說說對這幾個設計模式的理解。名字相近,一幾度弄不清這都是啥跟啥。 都叫xx工廠模式,顧名思義,工廠是要生產產品(在程式設計中就是類的例項物件)的。而這三種模式都是生產型模式,區別在於生產例項的方式、時機以及所能夠達