面板模式(Facade)

來源:互聯網
上載者:User

標籤:聲明   exce   一個   abstract   private   test   row   ase   stat   

Facade?

如果是按照RUP+ 的開發模式,隨著迭代與增量的進行,軟體代碼會越來越龐大,各個模組之間的關係會越來越複雜,如何你是初次接受該項目的開發非非常棘手,要理解清楚他們之間的關係,才能繼續完成下面的工作。不過與其這麼做,不如為這個大型程式準備一個“視窗”。這樣,我們就不必單獨地關注每個類了,只需簡單地對“視窗”提出請求即可。

  • 關鍵字:** 責任關係,依賴關係 ,調用順序 **

  • 要點概念:提供的視窗可以理解為開闢一個高層的介面

  • 聲明時候使用外觀設計模式:
    當某個程式員得意地說出“啊,在調用那個類之前需要先調用這個類。在調用那個方法之前需要先在這個類中註冊一下”的時候,就意味著我們需要引入Facade角色了。

  • 相關設計模式:

◆Abstract Factory模式(第8章)可以將Abstract Factory 模式看作產生複雜執行個體時的Facade模式。因為它提供了“要想產生這個執行個體只需要調用這個方法就OK了”的簡單介面。

◆Singleton模式(第5章)有時會使用Singleton模式建立Facade角色。

◆Mediator模式(第16章)在Facade模式中,Facade角色單方面地使用其他角色來提供高層介面(API)。
而在Mediator模式中,Mediator角色作為Colleague角色間的仲裁者負責調停。可以說,Facade模式是單向的,而Mediator角色是雙向的。

理解職責
  • 目的:實現讀取text文本轉為一個網頁連結的程式
    包========>類======>解釋
    pagemaker |Database 從郵件地址中擷取使用者名稱的類
    pagemaker |HtmlWriter 編寫HTML檔案的類
    pagemaker |PageMaker |根據郵件地址編寫該使用者的Web頁面
    |無需package|MainT測試程式行為的類

HtmlWriter :html中隱藏聲明要求必須先調用title()而在PageMaker中我們提前就維護好了調用的順序,後面在MainT不需要關係具體的調用依賴關係。

UML

類圖:

Code
  • DataBase :
public class DataBase {    private DataBase(){    }    /**     * 輸入檔案名稱讀取資料     * @param filname     * @return     */    public static Properties getProperties(String filname){        String filename=filname+".ini";        Properties prop = new Properties();        try {            prop.load(new FileInputStream(filename));        }catch (IOException e){            e.printStackTrace();        }        return prop;    }}
  • HtmlWriter :
public class HtmlWriter {    private Writer printWriter;    public HtmlWriter(Writer writer) {        this.printWriter = writer;    }    // 輸出標題 (這是隱藏條件必須先調用title方法)    public void title(String title) throws IOException {        printWriter.write("<html>");        printWriter.write("<head>");        printWriter.write("<title>"+title+"</title>");        printWriter.write("</head>");        printWriter.write("<body>\n");        printWriter.write("<h1>"+title+"</h1>");    }    // 輸出段落    public void paragraph(String msg)throws IOException{        printWriter.write("<p>"+msg+"</p>");    }    // 輸出超連結    public void link(String href,String caption) throws IOException{        printWriter.write("<a href=\""+href+"\">"+caption+"</a>");    }    // 輸出郵件地址    public void mailto(String mailaddr,String username) throws IOException{        link("mailto:"+mailaddr,username);    }    public void close() throws IOException{        printWriter.write("</body>");        printWriter.write("</html>\n");        printWriter.close();    }}
  • PageMaker:
public class PageMaker {    private PageMaker(){    }    /**     * 外觀介面     * @param mailaddr     * @param filename     */    public static void makeWelcomePage(String mailaddr,String filename){        try {            Properties mailporo = DataBase.getProperties("testmail");            String usernmae = mailporo.getProperty(mailaddr);            HtmlWriter htmlWriter = new HtmlWriter(new FileWriter(filename));            htmlWriter.title("歡迎來到"+usernmae+"頁面!");            htmlWriter.paragraph(usernmae+"歡迎來到"+usernmae+" 的首頁。");            htmlWriter.paragraph("歡迎給我發送郵件:");            htmlWriter.link(mailaddr,usernmae);            htmlWriter.close();            System.out.println("這是由於"+usernmae+"建立的郵件的首頁介面"+ "From to"+usernmae);        }catch (IOException e){            e.printStackTrace();        }    }}
  • MainT:
public class MainT {    public static void main(String[] args) {        PageMaker.makeWelcomePage("[email protected]","welcome.html");    }}

面板模式(Facade)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.