外觀(Facade)模式------簡單視窗
》》使用Facade 模式可以為互相關聯在一起的錯綜複雜的類整理出高層介面(API)。
其中的 Facade 角色可以讓系統外只有一個簡單的介面(API)。而且,Facade
角色還會考慮到系統內部各個類之間的責任關係和依賴關係,按照正確的順序調
用各個類。
----------------下面的示例程式中:只考慮一個由3個簡單的類構成的系統。也就是一個
用於從郵件地址中獲取使用者名稱字的資料庫類(Database) ,一個用於編寫HTML
檔案的類(HtmlWriter),以及一個扮演 Facade 角色並提供高層介面API的類
(PageMaker)
--------------------------------------------
《在瀏覽器中檢視到的使用示例程式編寫出的Web頁面》
------------------------------------------------
《示例程式的類圖》
--------------------------------------------------------------------
《Database類》
package pagemaker;
import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;
public class Database {
//防止外部 new 出 Database 的例項,所以要宣告為 private
private Database(){
}
public static Properties getProperties(String dbname){ //根據資料庫名獲取 Properties
String filename = dbname+".txt";
Properties prop = new Properties();
try{
prop.load(new FileInputStream("E:/Java基礎練習/Java/src/"+filename));
}catch(IOException e){
System.out.println("Waring"+filename+"is not found");
}
return prop;
}
}
----------------------------------------------------------
《maildata.txt》----------》資料檔案
[email protected]=Hiroshi Yuki
[email protected]=Hanako Sato
[email protected]=Tomura
[email protected]=Mamoru Takahashi
---------------------------------------------------------
《HtmlWriter類》
package pagemaker;
import java.io.Writer;
import java.io.IOException;
public class HtmlWriter {
private Writer writer;
public HtmlWriter(Writer writer){
this.writer = writer;
}
public void title(String title) throws IOException{ //輸出標題
writer.write("<html>\n");
writer.write("<head>\n");
writer.write("<title>"+title+"</title>\n");
writer.write("</head>\n");
writer.write("<body>\n");
writer.write("<h1>"+title+"</h1>");
}
public void paragraph(String msg) throws IOException{ //輸出段落
writer.write("<p>"+msg+"</p>\n");
}
public void link(String href , String caption) throws IOException{ //輸出超連結
paragraph("<a href=\""+href+"\">"+caption+"</a>");
}
public void mailto(String mailaddr , String username) throws IOException{ //輸出郵件地址
link("mailto"+mailaddr , username);
}
public void close() throws IOException{ //結束輸出 html
writer.write("</body>\n");
writer.write("</html>\n");
writer.close();
}
}
----------------------------------------------------
《PageMaker類》
package pagemaker;
import java.io.IOException;
import java.util.Properties;
import java.io.FileWriter;
public class PageMaker {
//防止外部new 出 PageMaker 的例項,所以宣告為 private
private PageMaker(){
}
public static void makeWelcomePage(String mailaddr , String filename){
try{
Properties mailprop = Database.getProperties("maildata");
String username = mailprop.getProperty(mailaddr);
HtmlWriter writer = new HtmlWriter(new FileWriter(filename));
writer.title("Welcome to "+username+"'s Page!");
writer.paragraph("歡迎來到"+username+"的主頁");
writer.paragraph("等著你的郵件哦!");
writer.mailto(mailaddr, username);
writer.close();
System.out.println(filename + "is created for " + mailaddr +"("+username+")");
}catch(IOException e){
e.printStackTrace();
}
}
}
----------------------------------------------------
《Main類》---------》測試程式
package pagemaker;
public class Main {
public static void main(String[] args){
PageMaker.makeWelcomePage("[email protected]", "welcome.html");
}
}
---------------------------------------------------
《Facade 模式中的登場角色》
**** Facade (視窗)
Facade 角色是代表構成系統的許多其他角色的“簡單視窗”。Facade 角色
向系統外部提供高層介面 (API)。在示例程式中,由PageMaker 類扮演此角
色。
**** 構成系統的許多其他角色
這些角色各自完成自己的工作,它們並不知道 Facade 角色。Facade 角色
呼叫其他角色進行工作,但是其他角色不會呼叫 Facade 角色。在示例程式中,
Database 和 HtmlWriter 扮演此角色。
**** Client (請求者)
Client 角色負責呼叫 Facade 角色。在示例程式中,由 Main 類扮演此角色。
-----------------------------------------------------
《擴充套件思路的要點》
1. Facade 角色到底做什麼工作
介面變少了。介面變少了還意味著程式與外部關聯關係弱化了,這樣更容易
使我們的包(類的集合)作為元件被複用。
與設計類一樣,在設計包時,需要考慮類的可見性。如果讓外部(包的外部)
看到了類,包內部程式碼的修改就會變得困難。
2.遞迴地使用 Facade 模式
假設現在有幾個持有 Facade 角色類的集合。那麼,我們可以通過整合這幾
個集合來引入新的 Facade 角色。也就是說,我們可以遞迴地使用 Facade 模式。
在超大系統中,往往都含有非常多的類和包。如果我們在每個關鍵的地方使用
Facade 模式,那麼系統的維護就會變得輕鬆得多。
3.開發人員不願意建立 Facade 角色的原因-----心理原因
當某個程式設計師得意地說“在呼叫那個類之前需要先呼叫這個類。在呼叫那個方法
之前需要先在這個類中註冊一下”的時候,就意味者我們需要引入 Facade 角色了。
------------------------------------------------------
《相關的設計模式》
**** Abstract Factory 模式
**** Singleton 模式
**** Mediator 模式
相關推薦
外觀(Facade)模式------簡單視窗
》》使用Facade 模式可以為互相關聯在一起的錯綜複雜的類整理出高層介面(API)。 其中的 Facade 角色可以讓系統外只有一個簡單的介面(API)。而且,Facade 角色還會考慮到系統內部各個類之間的責任關係和依賴關係,按照正
設計模式:外觀(Facade)模式
text 一起 其它 QQ 如何 互調 IT 抽象 整合 設計模式:外觀(Facade)模式 一、前言 外觀模式是一種非常簡單的模式,簡單到我們經常都會使用,比如對於類A和B,如果兩者需要交互,經過一定的處理過程才能實現某一個具體的功能,那麽我們可以將這個處理的過程定義
設計模式(6)—— 結構型 ——外觀(Facade)
簡介 定義:又叫門面模式,提供一個統一的介面,用來訪問子系統中的一群介面。 解釋:外觀模式定義了一個高層介面,讓子系統更容易被使用。 型別:結構型 適用場景: 子系統越來越複雜,外觀模式能夠提供簡單的呼叫介面。
設計模式的征途—11.外觀(Facade)模式
在軟體開發中,有時候為了完成一項較為複雜的功能,一個類需要和多個其他業務類互動,而這些需要互動的業務類經常會作為一個完整的整體出現,由於涉及的類比較多,導致使用時程式碼較為複雜,此時,特別需要一個類似服務員一樣的角色,由他來負責和多個業務類進行互動,而使用這些業務類的類只需要和該類進行互動即可。外觀模式通過引
外觀(Facade)模式
什麼是(Facade)模式? Facade(外觀)模式為子系統中的各類(或結構與方法)提供一個簡明一致的介面,隱藏子系統的複雜性,使子系統更加容易使用(出自百度文庫)。即當子系統複雜或者繁鎖時,我們讓子系統提供一個視窗,程式中稱為介面,其它程式或者物件就通過這個
設計模式之外觀(facade)模式
一、概念介紹 外觀模式(Facade),他隱藏了系統的複雜性,並向客戶端提供了一個可以訪問系統的介面。這種型別的設計模式屬於結構性模式。為子系統中的一組介面提供了一個統一的訪問介面,這個介面使得子系統更容易被訪問或者使用。 二、角色及使用場景 簡單來說,該
外觀模式(Facade Pattern):簡單&粗暴解析
1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 結構型 裡其中的 外觀模式。 文章中例項 linhaojian的Githu
【JAVA設計模式】外觀模式(Facade Pattern)
簡單 產生 creat ide oid dsm ref 功能 .net 一 定義 為子系統中的一組接口提供一個一致的界面。Facade模式定義了一個高層的接口,這個接口使得這一子系統更加easy使用。 二 案例 一個子系統中擁有3個模塊。每一個模塊
外觀模式(Facade Pattern)
源代碼 任務 減少 系統 移植 computer uml類圖 auto 完成 定義: 定義了一個高層、統一的接口,外部與通過這個統一的接口對子系統中的一群接口進行訪問。 解決的問題: 避免了系統與系統之間的高耦合度 使得復雜的子系統用法變得簡單 uml類
C#設計模式:外觀模式(Facade Pattern)
避免 linq 訪問 客戶端 這一 存在 www 針對 public 一,什麽是外觀模式? 外觀模式:為子系統中的一組接口提供一個一致的界面,定義一個高層接口,這個接口使得這一子系統更加容易使用。 二,我們看看代碼的實現 using System; using Syste
外觀模式(Facade)
edi lena () 聲明 string urn ade rop 要求 Facade? 如果是按照RUP+ 的開發模式,隨著叠代與增量的進行,軟件代碼會越來越龐大,各個模塊之間的關系會越來越復雜,如何你是初次接受該項目的開發非非常棘手,要理解清楚他們之間的關系,才能繼續完
重走Java設計模式——外觀模式(Facade Pattern)
外觀模式 定義 外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增一個介面,來隱藏系統的複雜性。 這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系
設計模式之外觀模式(Facade)
設計模式之外觀模式(Facade) 場景 病人去醫院看病,首先病人必須先掛號,然後門診。如果醫生要求化驗,病人必須首先劃價,然後繳費,才可以到化驗部門做化驗。化驗後再回到門診室。 解決這種不便的方法便是引進外觀模式,醫院可以設定一個接待員的位置,由接待員負責代為掛號、劃價
設計模式-外觀模式(Facade)
外觀模式又稱為門面模式,為一組類似功能的叢集,比如類庫、子系統等,提供一致的入口供client呼叫 角色和職責: 1.門面(Facade)-Computer: 外觀模式的核心。它被客戶角色呼叫,它熟悉子系統的功能。內部根據客戶角色的需求預定了幾種功能的組合 2.子系統(Pac
PHP設計模式之外觀模式(Facade)瞭解下
這個外觀模式,就是通過在必需的邏輯和方法的集合前建立簡單的外觀介面,並且還會隱藏了呼叫物件的複雜性,它和建造者模式非常相似,建造者模式一般是簡化物件的呼叫的複雜性,但是外觀模式一般是簡化含有很多邏輯步驟和方法呼叫的複雜性。 來看下例項,先來描述下: 設計一個User類,裡
設計模式(二)【Facade模式(外觀模式)】
Facade模式(外觀模式) 為子系統中的一組介面提供一個統一的介面。Facade模式定義了一個更高層的介面,使系統更容易使用。 Facade模式 關鍵特徵 意圖 希望簡化 原系統的使用方
我所理解的設計模式(C++實現)——外觀模式(Facade Pattern)
概述 想想我們小時候玩的四驅車,裡面的構造很複雜,馬達,舵機,電池組等等,而我們控制它卻非常簡單,只要開啟電池開關,他就可以跑。我們其實不用知道它裡面是如何工作,只要知道撥動開關它就可以工作就行了,這個開關其實就四驅車給我們的一個友好的元件,使得我們可以很方便的控制它。 外
設計模式學習總結:外觀模式(Facade)
1.場景分析 如下圖所示,我們有一個家庭影院系統,其中包含了調音器、擴音器、播放器、劇場光、爆米花機等部分: 然後我們模擬使用這個系統來播放一部電影,則我們需要進行一下操作: //開啟爆米花機,開始爆米花 popper.on() popper.pop(
設計模式總結篇系列:外觀模式(Facade)
張三自從畢業後開始做軟體開發,做著做著發現不爽了,錢賺不了太多,頭髮也白了。於是拿著一點小資本,想著做點小生意。瞅著眼前的餐飲行業還不錯,於是打算開一家餐館。開參觀可不是一件容易的事,僅僅行政類的審批流程就不少。至少包括辦理衛生許可證,辦理稅務登記,辦理工商登記等。 我們
23種設計模式-9.外觀模式(Facade Pattern)
動機(Motivate): 在軟體開發系統中,客戶程式經常會與複雜系統的內部子系統之間產生耦合,而導致客戶程式隨著子系統的變化而變化。那麼如何簡化客戶程式與子系統之間的互動介面?如何將複雜系統的內部子系統與客戶程式之間的依賴解耦? 意圖(Intent): 為