国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java-馬士兵設計模式學習筆記-裝飾者模式

2019-11-15 00:34:47
字體:
來源:轉載
供稿:網友
java-馬士兵設計模式學習筆記-裝飾者模式

Java裝飾者模式簡介

一、假設有一個Worker接口,它有一個doSomething方法,Plumber和Carpenter都實現了Worker接口,代碼及關系如下:

1.Worker.javapackage decorator;public interface Worker {    public void doSomething();}

2.Plumber.javapublic class Plumber implements Worker {    @Override    public void doSomething() {        System.out.

3.Carpenterpublic class Carpenter implements Worker{    public void doSomething(){        System.out.println("修門窗");    }}
4.測試代碼 Test.javapublic class Test {    public static void main(String[] args) {        Worker worker = null;        Carpenter carpenter = new Carpenter();        Plumber plumber = new Plumber();        worker = carpenter;        worker.doSomething();        worker = plumber;        worker.doSomething();    }}

測試結果如下:

二、現有A、B兩家公司,都有木工(Carpenter)和水管工(Plumber),但兩公司的對兩個工種的要求都不同,A公司要求員工在doSomething前自己介紹“我是A公司的”;B公司要求員工在doSomething前自己介紹“我是B公司的”;一個直接但不科學的設計方法是為每個公司都設計各自的木工(Carpenter)和水管工(Plumber),若公司增加到100個,則類要增加到200個,若再增加其他工種,則類會更多,關系如下:

三、此情況適合采用裝飾者模式,為每個公司設計一個裝飾類xWorker,xWorker也實現Worker接口,且有一個參數類型為Worker的構造函數和一個類型為Worker的成員變量,這樣xWorker就可以取得相應類型worker的引用,在xWorker的doSomething()方法里處理各自公司的特殊要求:

 1 增加類 AWorker.java 2  3 public class AWorker implements Worker { 4  5     private Worker worker; 6      7     //通過些構造函數,AWorker就可以得到具體工種的引用, 8     //為下面的doSomething()方法中加入A公司的特殊要求做準備 9     public AWorker(Worker worker){10         this.worker = worker;11     }12     13     @Override14     public void doSomething() {15         System.out.println("您好!我是A公司的員工");16         worker.doSomething();17     }18 19 }

 1 //增加類 BWorker.java 2  3 public class BWorker implements Worker { 4  5     private Worker worker; 6      7     public BWorker(Worker worker){ 8         this.worker = worker; 9     }10     11     @Override12     public void doSomething() {13         System.out.println("您好!我是B公司的員工。");14         worker.doSomething();15     }16 17 }

 1 //測試代碼 2      3 public static void main(String[] args) { 4          5         //A公司 6         Carpenter carpenterA = new Carpenter(); 7         Plumber plumberA = new Plumber(); 8         AWorker aWorker1 = new AWorker(carpenterA); 9         AWorker aWorker2 = new AWorker(plumberA);10         11         aWorker1.doSomething();12         aWorker2.doSomething();13     14         System.out.println("==================================");15         16         //B公司17         Carpenter carpenterB = new Carpenter();18         Plumber plumberB = new Plumber();19         BWorker bWorker1 = new BWorker(carpenterB);20         BWorker bWorker2 = new BWorker(plumberB);21         22         bWorker1.doSomething();23         bWorker2.doSomething();24     }25 }

測試結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 库尔勒市| 汾阳市| 黔西县| 遵义县| 得荣县| 内丘县| 长子县| 农安县| 廉江市| 嵊泗县| 正定县| 盘锦市| 宿州市| 平乐县| 湘潭市| 黔江区| 武陟县| 铜山县| 黎城县| 郧西县| 杭锦后旗| 中超| 简阳市| 绥棱县| 萨迦县| 偃师市| 富蕴县| 瓦房店市| 天台县| 榆社县| 大埔区| 阿克陶县| 登封市| 上杭县| 镇江市| 特克斯县| 土默特右旗| 静乐县| 安徽省| 陆丰市| 施秉县|