1. 程式人生 > >設計模式-外觀模式(又稱門面模式)

設計模式-外觀模式(又稱門面模式)

外觀模式

定義

為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,此介面使得子系統更加容易使用。

類圖

結構

子系統類(subsystem):實現子系統的功能,處理facade物件指派的任務。

package com.headfirst.facademode.dao;

public class SubSystemA {

	public void methodA(){
		System.out.println("子系統A執行方法A");
	}
	
}
package com.headfirst.facademode.dao;

public class SubSystemB {

	public void methodB(){
		System.out.println("子系統B執行方法B");
	}
	
}
package com.headfirst.facademode.dao;

public class SubSystemC {
	
	public void methodC(){
		System.out.println("子系統C執行方法C");
	}
	
}

外觀類(facade):負責呼叫子系統的方法。

package com.headfirst.facademode.dao;

public class Facade {

	private SubSystemA a;
	private SubSystemB b;
	private SubSystemC c;
	
	public Facade(){
		a = new SubSystemA();
		b = new SubSystemB();
		c = new SubSystemC();
	}
	
	public void execute(){
		a.methodA();
		b.methodB();
		c.methodC();
	}
	
}

測試類

	public static void main(String[] args) {
		Facade facade = new Facade();
		facade.execute();
	}

結果

案例

這裡我以炒股為例,我們都知道炒股是一項技術活,需要掌握大量的金融知識和經驗的人才能從炒股中獲利,一般的人根本不可能精通金融常識,所以我們把買股票,買債券,買基金這個技術活交給基金管理人來管理,我們只負責收益,其他的事情都不用管,基金管理人充當外觀類的角色,買賣股票,買賣基金,買賣債券就充當子系統的實現類。

股票類

package com.headfirst.facademode.dao;

public class Stock {

	public void buy(){
		System.out.println("買入股票");
	}

	public void sell(){
		System.out.println("賣出股票");
	}
	
}

基金類

package com.headfirst.facademode.dao;

public class Fund {
	
	public void buy(){
		System.out.println("買入基金");
	}

	public void sell(){
		System.out.println("賣出基金");
	}
	
}

債券類

package com.headfirst.facademode.dao;

public class Bond {
	
	public void buy(){
		System.out.println("買入債券");
	}

	public void sell(){
		System.out.println("賣出債券");
	}
	
}

基金管理人類

package com.headfirst.facademode.dao;

public class FundManager {

	private Stock stock;
	private Fund fund;
	private Bond bond;
	
	public FundManager(){
		stock = new Stock();
		fund = new Fund();
		bond = new Bond();
	}
	
	public void buyFund(){
		stock.buy();
		fund.buy();
		bond.buy();
	}
	
	public void sellFund(){
		stock.sell();
		fund.sell();
		bond.sell();
	}
	
}

測試類

	public static void main(String[] args) {
		FundManager fundManager = new FundManager();
		fundManager.buyFund();
		fundManager.sellFund();
	}

測試結果

優點

1.減少系統的相互依賴

2.避免直接訪問子系統的內部方法

缺點

不符合開放封閉原則

相關推薦

設計模式-外觀模式門面模式

外觀模式 定義 為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,此介面使得子系統更加容易使用。 類圖 結構 子系統類(subsystem):實現子系統的功能,處理facade物件指派的任務。 package com.headfirst.fac

中國剩餘定理 孫子定理

部落格圖片都飛了,所以看的時候請多多擔待。 中國剩餘定理是數論中的一個關於一元線性同餘方程組的定理,說明了一元線性同餘方程組有解的準則以及求解方法。也稱為孫子定理。 本文大部分使用的內容來自維基百科。 中國剩餘定理說明: 題意:給出你n個ai和mi,最後讓求出

設計模式(35)-----設計模式階段性總結一句話概括一個模式

目錄: 設計模式(1)------初始設計模式(回撥函式)  設計模式要從語義上出發,而不要從語法上出發,其實設計模式歸根結底就是多型的有計劃的組合。     設計模式(2)------行為型模式------觀察者設計模式 想想氣象站,根據天氣的變化動態的通知觀眾實時

c++建立型設計模式--工廠模式--簡單工廠單個產品的構建

思想 主要是對於單個簡單的產品進行構建 基類 #pragma once #include <iostream> /** * 基類指標 *Date :[10/12/2018 ] *Aut

多執行緒設計模式——Guarded Suspension保護性暫掛模式

這些都是根據我最近看的《Java實戰指南多執行緒程式設計(設計模式篇)》所得整理。 模式名稱 Guarded Suspension(保護性暫掛模式) 模式面對的問題 多執行緒程式設計中,往往將一個任務分解為不同的部分,將其交由不同的執行緒來執行,這些

python mixin設計模式的應用多繼承應用場景

=== 功能 style nor pre pytho otg 開發思想 不同的 什麽是設計模式? 設計模式只是一種開發思想。不是什麽固定的格式。 前人的好的思想,我們後人拿過來用! mixin設計模式: 1.mixin設計迷失可以在不對類的內容的修改前提

21種JavaScript設計模式最新記錄含圖和示例

  最近觀看了《Javascript設計模式系統講解與應用》教程,對設計模式有了新的認識,特在此做些記錄。 一、UML   文中會涉及眾多的UML類圖,在開篇需要做點基礎概念的認識。以下面的圖為例,圖片和說明均來源於《大話設計模式》一書。   (1)矩形框,它代表一個類。類圖分三層,第一層顯示類的名

查找算法 - 折半查找二分查找

source arch 缺點 頻繁 span return 順序 代碼實現 困難 簡介 折半查找(Binary Search),又稱為二分查找。前提是線性表中的記錄必須是 關鍵碼有序,線性表必須采用 順序存儲。 基本思想 在有序表中,取中間記錄作為比較對象,若給定值與中間記

二十二訪問者模式詳解偽動態雙分派

 作者:zuoxiaolong8810(左瀟龍),轉載請註明出處,特別說明:本博文來自博主原部落格,為保證新部落格中博文的完整性,特複製到此留存,如需轉載請註明新部落格地址即可。               本次LZ

演算法之路----漢諾塔河內之塔

漢諾塔是很簡單也很經典的演算法之一。 漢諾塔是根據一個傳說形成的數學問題: 有三根杆子A,B,C 。A杆上有N個(N>1)穿孔圓盤,盤的尺寸由下到上依次變小。要求按下列規則將所有圓盤移至C杆: * 1 每次只能移動一個圓盤; * 2 大盤不能疊在小盤上面。 提示:可將圓

單例模式新談包含三種方式

  設計模式是一套被反覆使用,多數人知曉,經過分類編目的,程式碼設計的總結,也可以說是前人的智慧結晶。學習設計模式能讓我們對一些應用場景使用相同的套路達到很好的效果,我會不定時更新一些自己對設計模式的理解的文章,從定義,實現,應用場景來說說設計模式,今天我要說的物件是單例模式一,定義  什麼是單例模式,字面理

SG平滑演算法多項式平滑演算法

今天是平安夜,閒來無事,那就來寫一下SG平滑演算法吧! SG平滑演算法是由Savizkg和Golag提出來的。基於最小二乘原理的多項式平滑演算法,也稱卷積平滑。為啥叫多項式平滑呢?且看下去。  下面使用五點平滑演算法來說明平滑過程 原理很簡單如圖: 把光譜一段區間的等

Windows、linux系統使用命令提示符功能cmd,command,命令列詳細圖文教程和手冊下載

cmd是command的縮寫.命令列詳細說明(點選看詳細說明) 說明 在9x系統下輸入command就可以開啟命令列.而在NT系統上可以輸入cmd來開啟。 操作順序 操作順序是:開始->執行->鍵入cmd或command  命令列顯示:系統版本,檔案系統版本等等  檢視

一個簡單的模式字串查詢支援萬用字元‘*’

資料結構課的一些作業還是有些難度的,對於部分有價值或下了苦工的問題還是傳上來好叻,回頭寫註釋,紀念菜雞生涯 【問題描述】 在當前目錄下的檔案string.in中查詢給定的字串,並將查詢到的字串和行號輸出到當前目錄下的檔案string.out中。要求: 1)從鍵

觀察者模式詳解包含觀察者模式JDK的漏洞以及事件驅動模型

import java.util.Vector; //被觀察者類 public class Observable { //這是一個改變標識,來標記該被觀察者有沒有改變 private boolean changed = false; //持有一個觀察者列表 private

一般的模式匹配演算法求子串位置

//一般的模式匹配演算法 #include<stdio.h> int Index (char *s , char *t , int pos );//返回子串t在主串s中第pos個

使用Stm32Cubemx配置定時器正交編碼模式詳解附上程式思想介紹

        這篇文章也是本人做完一個專案後抱著想記錄點東西鞏固下知識同時又想給後來的技術同伴一點參考的想法寫下來的,和本人之前有關中穎晶片的博文意圖是一致的。看完本篇文章可以瞭解stm32晶片如何配置定時器正交編碼模式的同時對cubemx也會有一定的瞭解。這款工具很好用

Flink 本地模式安裝配置 包含java環境配置

一、JDK安裝配置:    1.先從Oracle官網下載JDK。根據自己的系統下載相應版本。我下載的是***.tar.gz  具體忘了    2.建立一個目錄/usr/lib/jvm以便於把下載解壓後的包放到這個目錄下     命令:sudo mkdir /usr/

對一個字元按bit位逆序反轉

題目要求如題所示:將一個字元按bit位逆序,例如一個位元組是0x11,將其逆序後就變成0x88。下面是四種解法,其中最後一種效率最高,是從《Hacker's Delight》這本書中學來的。第一種:看似創新,其實最笨的做法。使用bit型別,程式碼不夠簡潔,執行效率較低,並且擴

北京化工大學2018年10月程序設計競賽部分題解A,C,E,H

部分 main 新生代 圖片 ret switch 中間 位置 tin 目錄 北京化工大學2018年10月程序設計競賽部分題解(A,C,E,H) 競賽事件相關 競賽鏈接 競賽題目 總結 北京化工大學2018年10月程序設計競賽部分題解(A,C,E,H) 競賽事件相關