標籤:聲明 exce 一個 abstract private test row ase stat
Facade?
如果是按照RUP+ 的開發模式,隨著迭代與增量的進行,軟體代碼會越來越龐大,各個模組之間的關係會越來越複雜,如何你是初次接受該項目的開發非非常棘手,要理解清楚他們之間的關係,才能繼續完成下面的工作。不過與其這麼做,不如為這個大型程式準備一個“視窗”。這樣,我們就不必單獨地關注每個類了,只需簡單地對“視窗”提出請求即可。
◆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
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; }}
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(); }}
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(); } }}
public class MainT { public static void main(String[] args) { PageMaker.makeWelcomePage("[email protected]","welcome.html"); }}
面板模式(Facade)