Android重拾設計模式系列——工廠方法模式

個人博客CoorChice,https://chenbingx.github.io/ ,最新文章將會首發CoorChice的博客,歡迎探索哦 !
同時,搜索微信公眾號CoorChice,或掃描文章末尾二維碼,可以關注我的微信公眾號。同期文章也將會優先推送到微信公眾號中,以提醒您有新鮮文章出爐。

封面-設計模式.png

工廠方法模式和簡單工廠模式本質是類似的,都是用來封裝產品的創建過程。但它們的實現也有很大的,所以通常被作為兩種不同的設計模式看待。

簡單工廠模式傳送門

定義及實質

  • 定義
    定義一個用于創建對象的接口,讓子類決定實例化那一個對象,即使一個類的實現延遲到子類實現。
  • 實質
    延遲到子類選擇實現。

雖然都是選擇實現,但工廠方法模式主要用于創建一系列的產品簇(就是相似的東西),而簡單工廠法可以創建任何互相沒有關聯的實例。

模式圖解

工廠方法模式UML圖

工廠方法模式UML圖

從上圖可以看出:

  1. Creator是抽象父類,ConcreteCreator是其子類;
  2. ConcreteCreator重寫了父類的factoryMethod() 來創建真正的產品ConcreteProduct,也就是說ConcreteCreator依賴ConcreteProduct;需要注意,Creator依賴的是Product;
  3. ConcreteProduct實現了Product接口。
//Creator
public abstract class Creator{
    public abstrat Product factoryMethod();
    
    public void someOpration(){
        //在這里延遲創建了Product
        factorMethod().doSomthing();
    }
}

//ConcreteCreator
public class ConcreteCreator extends Creator{
    @Overrid
    public Product factoryMethod(){
        return new ConcreteProduct();
    }
}

//Product
public interface Product{
   void doSomthing();
}

//public class ConcreteProduct implement Product{
    @Overrid 
    public void doSomthing(){
        System.out.println("ConcreteProduct");
    }
}

下面看看Client怎么使用:

public class Client{
    priavte Creator creator;
    public static void main(String[] args){
        creator = new ConcreteCreator(); //創建符合需求的Creator子類
        creator.someOpration(); //調用這個方法才會創建Product
    }
}

工廠方法模式順序圖

工廠方法模式順序圖

結合上面的代碼看。

模式優缺點

優勢

  • 體現了依賴倒置 的原則,使程序的可擴展性增強,當有新需求時,只需要增加新的Creator子類,替換Client中的子類,而不需要修改其它地方;
  • 可以在不知道對象創建過程未確定的情況下進行編程;
  • 可以很好的鏈接平行類層次結構。

缺點

  • 工廠類和產品類耦合在一起。

拓展

平行類層次結構

指一個類層級(工廠方法模式中,每個Creator的抽象就代表著一個類層級)中的每一個類,在另一個類層級中都有對應的類與之呼應,這樣的一組類層就稱為平行類層次結構
解釋:
以Shape為例,具體的Shape對象和Shape對象的行為就構成了平行類層次結構。Shape對象層級中有Rectangle、Oval等,在Shape對象行為層級中,有Rectangle、Oval等的面積、周長等行為與之對應。所以它們構成了平行類層次結構。

CoorChice的公眾號
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 場景問題# 1.1 導出數據的應用框架## 考慮這樣一個實際應用:實現一個導出數據的應用框架,來讓客戶選擇數據...
    七寸知架構閱讀 6,776評論 6 75
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,961評論 1 15
  • 工作了也1年多了,最近2個月把那本經典的設計模式看了一遍。還是蠻有收獲的。至少比以前在學校的時候看多了很多的體會。...
    潘逸飛閱讀 737評論 0 0
  • 簡單工廠模式雖然簡單,但存在一個很嚴重的問題。當系統中需要引入新產品時,由于靜態工廠方法通過所傳入參數的不同來創建...
    justCode_閱讀 1,201評論 1 9
  • 簇入你的懷抱 滿山松杉 毛竹和知名不知名的雜樹 一片接一片 一叢連一叢 蔥蘢、蒼翠 蓋地遮天 從山麓一直擁上山頂 ...
    藍在南方閱讀 258評論 0 2