1. 程式人生 > >外觀(Facade)模式------簡單視窗

外觀(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):     為