1. 程式人生 > >工廠方法模式,抽象工廠模式,簡單例項分析

工廠方法模式,抽象工廠模式,簡單例項分析

為了更好地理解這兩個模式,自己假設了如下場景,可能有些牽強,但應該還好。嘿嘿。 Acer,Lenovo兩家本本製造商,假設原來有一OEM兩個牌子的本本都做,這時,無論你想買那種牌子的,都可以直接向OEM購買。 可是後來該OEM商發現,如果一次同時做很多個牌子的本本,有些不利於管理,而且,如果以後要加入新的品牌的話,要有許多裝置上的改動,等等原因,於是,它決定衍生出些子廠,每個子廠只做一種牌子的本本,而OEM核心總部,只負責制定規範,即,每個子廠要完成的所有任務。 該OEM的初始狀態,就是靜態工廠方法的場景,自己負責一切生產任務,根據外界的需求,去製造本本。 後來,為了便於管理,和把引入新品牌後產生的變動降到最低,採取了工廠方法模式。即,核心的工廠不再負責建立等具體動作,把這些派發給自己的子工廠。而核心工廠,僅負責制定規範。 1.工廠方法模式 首先,定義產品介面,Laptop,當然,也可以是個抽象類。

點選(此處)摺疊或開啟

  1. package factoryMethod;
  2. abstract public class Laptop {
  3.     private String mark;
  4.     public Laptop(String str){
  5.         this.mark = str;
  6.     }
  7.     abstract public String getId();
  8.     public void echoMark(){
  9.         System.out.println("this is a "+mark+" Laptop");
  10.     }
  11. }

有了產品介面,我們就可以去定義那個核心工廠介面

點選(此處

)摺疊或開啟

  1. package factoryMethod;
  2. public interface LaptopFactory {
  3.     public Laptop produce();
  4.     public void service();
  5. }
如程式碼所示,核心工廠規定了它子類要完成的行為,即,製造本本,和售後服務。 下面,是具體產品類,比如Acer品牌的本本

點選(此處)摺疊或開啟

  1. package factoryMethod;
  2. public class AcerLaptop extends Laptop {
  3.     private static final String
     mark = "Acer";
  4.     protected static int initId;
  5.     public AcerLaptop() {
  6.         super(AcerLaptop.mark);
  7.         AcerLaptop.initId = 10001;
  8.     }
  9.     public String getId() {
  10.         return "Acer--"+(AcerLaptop.initId++);
  11.     }
  12. }
再來個Lenovo的本本

點選(此處)摺疊或開啟

  1. package factoryMethod;
  2. public class LenovoLaptop extends
     Laptop {
  3.     private static final String mark = "Lenovo";
  4.     protected static int initId;
  5.     public LenovoLaptop() {
  6.         super(LenovoLaptop.mark);
  7.         LenovoLaptop.initId = 20001;
  8.     }
  9.     public String getId() {
  10.         return "Lenovo--"+(LenovoLaptop.initId++);
  11.     }
  12. }

其實Laptop定義的抽象方法沒什麼具體意義,該例子只為描述工廠方法模式。 下面,來定義具體工廠,Acer的,和Lenovo的,裡面的方法同樣沒什麼太大意義,只為測試。

點選(此處)摺疊或開啟

  1. package factoryMethod;
  2. public class AcerFactory implements LaptopFactory {
  3.     @Override
  4.     public Laptop produce() {
  5.         return new AcerLaptop();//生產Acer的本本
  6.     }
  7.     @Override
  8.     public void service() {
  9.         System.out.println("welcom to Acer hotline ");
  10.     }
  11. }


點選(此處)摺疊或開啟

  1. public class LenovoFactory implements LaptopFactory{
  2.     public Laptop produce(){
  3.         return new LenovoLaptop();//生產lenovo的本本
  4.     }
  5.     public void service(){
  6.         System.out.println("welcom to Lenovo hotline ");
  7.     }
  8. }

來一個測試類。

點選(此處)摺疊或開啟

  1. package factoryMethod;
  2. public class Client {
  3.         public static void main(String[] args) {
  4.             LenovoFactory lf = new LenovoFactory();
  5.             AcerFactory af= new AcerFactory();
  6.             Laptop lt1 = lf.produce();
  7.             Laptop lt2 = lf.produce();
  8.             Laptop lt3 = af.produce();
  9.             Laptop lt4 = af.produce();
  10.             lf.service();
  11.             System.out.println(lt1.getId());
  12.             System.out.println(lt2.getId());
  13.             System.out.println("--------------");
  14.             af.service();
  15.             System.out.println(lt3.getId());
  16.             System.out.println(lt4.getId());
  17.         }
  18. }

列印結果如下

點選(此處)摺疊或開啟

  1. welcom to Lenovo hotline 
  2. Lenovo--20001
  3. Lenovo--20002
  4. --------------
  5. welcom to Acer hotline 
  6. Acer--10001
  7. Acer--10002

過了一段時間,該OEM決定除了做本本,也做手機。而且OEM核心工廠決定改變下現有策略,每個子工廠做同一品牌的兩個產品,例如,子工廠A做Acer的手機和本本。 這時,有了同族產品的概念,即某些產品是一個產品族的,這裡就是指同一個品牌的。 為了完成這一變更,就要是用抽象工廠方法了。這個要比前一個複雜一些,所以先畫了一個uml圖。 -工廠介面,AbstractFatory,指定了子類要實現的製造本本,製造手機的方法 -具體工廠類,AcerFactory,LenovoFactory,均實現了上述方法,每個具體工廠負責一個產品族。 -MobilePhone抽象類,指定Phone產品的一些屬性特徵,Laptop同理。 -Phone與Laptop屬於不同等級的產品,但是同一品牌的Phone和Laptop是同一產品族的產品,在此例中。 這裡就不再羅列程式碼了,uml圖可以比較清晰的說明每個角色間的關係。 總結起來,引用百度百科的一句話,抽象工廠模式使用同一個 工廠等級結構負責不同產品等級結構產品物件的建立。 ----------------------------------------------------------------------------

相關推薦

iOS經常使用設計模式——工廠方法簡單工廠模式工廠方法模式 抽象工廠模式

csdn bst 設計 cto mod 基類 load 引用 角色 1. 簡單工廠模式 怎樣理解簡單工廠,工廠方法。 抽象工廠三種設計模式? 簡單工廠的生活場景。賣早點的小攤販。他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠。它生產包子,饅頭,地溝油烙的

設計模式(2)——建立型——工廠相關:簡單工廠(Simple factory)工廠方法(Factory method)抽象工廠(Abstract factory)

概要 這裡試圖描述23個設計模式中的兩個工廠(Factory)相關的設計模式:工廠方法(Factorymethod),抽象工廠(Abstract factory)。 注意點: 這兩個都屬於建立型設計模式。 由於這兩個設計模式都

【設計模式-4】工廠模式簡單工廠工廠方法抽象工廠

簡單工廠模式(Simple Factory)   簡單工廠模式(Simple Factory Pattern):又稱為靜態工廠方法(Static Factory Method)模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義一個類來負責建立其

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

個人認為比起文字解釋,用類圖、程式碼和執行結果更能瞭解和感受設計模式的思想。 簡單工廠模式 public interface Shape { void draw(); } public class Triangle implements Shape {

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

目錄 1.簡單工廠模式 1)最基本的實現         簡單工廠常用的方法就是一個工廠類,裡面包含很多if else結構 或者switch case 、如下程式碼ProductA和ProductB是分別的兩個不同的類: public cl

java設計模式(二) 建立型模式 工廠模式 (簡單工廠工廠方法抽象工廠)

1.簡單工廠    定義:簡單工廠模式又 叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。   2.工廠方法    定義:定

iOS常用設計模式——工廠方法簡單工廠模式工廠方法模式 抽象工廠模式

1. 簡單工廠模式 如何理解簡單工廠,工廠方法, 抽象工廠三種設計模式? 簡單工廠的生活場景,賣早點的小攤販,他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠,它生產包子,饅頭,地溝油烙的煎餅。該場景對應的UML圖如下所示: 圖1:簡單工廠模式UML圖 簡單

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

1.簡單工廠模式:      簡單工廠模式又稱靜態工廠方法模式。從命名上就可以看出這個模式一定很簡單。它存 在的目的很簡單:定義一個用於建立物件的介面。 先來看看它的組成: 1) 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由 一個

工廠方法模式抽象工廠模式簡單例項分析

為了更好地理解這兩個模式,自己假設了如下場景,可能有些牽強,但應該還好。嘿嘿。 Acer,Lenovo兩家本本製造商,假設原來有一OEM兩個牌子的本本都做,這時,無論你想買那種牌子的,都可以直接向OEM購買。 可是後來該OEM商發現,如果一次同時做很多個牌子的本本,

工廠模式工廠方法模式抽象工廠模式) Java

工廠模式分為3類: * 簡單工廠模式 Simple Factory * 工廠方法模式 Factory Method * 抽象工廠模式 Abstract Factory thinking in Java 中工廠方法模式的例子: interface Ser

工廠模式工廠方法模式抽象工廠模式 詳解

1. 工廠模式1.1 描述簡單工廠模式是由一個工廠物件根據收到的訊息決定要建立哪一個類的物件例項。1.2 使用場景工廠類負責建立的物件比較少,客戶只需要傳入工廠類引數,對於如何建立物件(邏輯)不關心。簡單工廠模式很容易違反高內聚低耦合的原則,因此一般只在很簡單的情況下使用。1

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

在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多型別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始設定; 選擇生

淺談 簡單工廠模式工廠方法模式抽象工廠模式的優點和缺點

1.簡單工廠模式: 簡單工廠模式的實質是由一個工廠類根據傳入的引數 動態決定應該創建出哪一個產品類的例項 工廠類角色,抽象產品角色,具體產品角色 嚴格說這並不是一個設計模式,簡單工廠沒有抽象類,只有一個工廠類,這個類有個工廠方法是專門返回一個具體產品類,具體

2抽象工廠模式(Abstract Factory Pattern) 抽象工廠可以一下生產一個產品族(裏面有很多產品組成)

creat name hba abstract 模式 存在 names cto 園區 備註  工廠模式:要麽生產香蕉、要麽生產蘋果、要麽生產西紅柿;但是不能同時生產一個產品組。     抽象工廠:能同時生產一個產品族。===》抽象工廠存在原因 解釋 : 具體工廠

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

說到這幾個工廠模式有很多相似之處又有不同。最重要的是掌握這種思想,在以後搭建專案架構或寫一些功能,應用這些思想,讓自己的程式更健壯,或者說當你看到別人寫的程式應用到了這種思想能夠快速理解。話不多說,咱們先從入門級的小案例講起。 一.簡單工廠模式 基本概念:簡單工廠模式是由一個工廠類根據接受到的訊息決定要建

設計模式-建立型模式-工廠模式抽象工廠模式

簡單工廠模式 簡單工廠模式不是 23 種裡的一種,簡而言之,就是有一個專門生產某個產品的類。 它只算工廠模式的一個特殊實現。簡單工廠模式在實際中的應用相對於其他2個工廠模式用的還是相對少得多,因為它只適應很多簡單的情況。 簡單工廠例項 1)建立Shape介面 publ

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

學習了一下關於工廠的設計模式,寫個例子整理一下,例子是生產不同廠商的滑鼠,可能不太合適,記錄一下想法。 1.簡單工廠 這個模式在factory裡面動態選擇使用哪個類 public class Factory { public static Made g

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

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

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

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

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

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