裝飾者設計模式,簡單代碼實現

來源:互聯網
上載者:User


/**裝飾者模式 *   裝飾者模式就是使用被裝飾類的一個子類的執行個體,在用戶端將 * 這個子類的執行個體交給裝飾類。是整合的替代方案 *   優點:使用裝飾模式,可以提供比繼承更靈活的擴充項物件的功能,它可以動態添加對象 * 的功能,並且可以隨意地組合這些功能。 *   缺點:正因為可以隨意組合,所以就可能出現一些不合理地邏輯 *///首先建立手機類介面package july.star.decorate;/** * Phone * 建立手機類介面 * @author MoXingJian * @email 939697374@qq.com * @date 2016年12月11日 下午8:59:36 * @version 1.0 */public interface Phone {     //每個手機都有打電話的功能     public void call();}//實現其介面package july.star.decorate; /**  * IPhone  * @author MoXingJian  * @email 939697374@qq.com  * @date 2016年12月11日 下午9:01:17  * @version 1.0  */public class IPhone implements Phone{     @Override     public void call() {          System.out.println("手機可以打電話了。");     }}//建立抽象的手機抽象類別package july.star.decorate;/** * PhoneDecotate * 建立抽象的手機裝飾類 * @author MoXingJian * @email 939697374@qq.com * @date 2016年12月11日 下午9:03:29 * @version 1.0 */public abstract class PhoneDecorate implements Phone{     private Phone p;     public PhoneDecorate(Phone p){          this.p = p;     }     @Override     public void call() {          p.call();     }}//給手機裝飾彩鈴功能package july.star.decorate; /**  * RingPhoneDecorate  * 給手機裝飾彩鈴功能  * @author MoXingJian  * @email 939697374@qq.com  * @date 2016年12月11日 下午9:26:02  * @version 1.0  */public class RingPhoneDecorate extends PhoneDecorate{     public RingPhoneDecorate(Phone p) {          super(p);     }          @Override     public void call() {          System.out.println("手機可以聽彩鈴");          super.call();     }}//給手機添加播放視頻功能package july.star.decorate; /**  * MusicPhoneDecorate  * 給手機添加播放視頻功能  * @author MoXingJian  * @email 939697374@qq.com  * @date 2016年12月11日 下午9:29:04  * @version 1.0  */public class PlayPhoneDecorate extends PhoneDecorate{     public PlayPhoneDecorate(Phone p) {          super(p);     }          @Override     public void call() {          super.call();          System.out.println("手機可以播放視頻了");     }}//測試package july.star.decorate;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Scanner;/** * PhoneDemo * 裝飾者模式 *   裝飾者模式就是使用被裝飾類的一個子類的執行個體,在用戶端將 * 這個子類的執行個體交給裝飾類。是整合的替代方案 *   優點:使用裝飾模式,可以提供比繼承更靈活的擴充項物件的功能,它可以動態添加對象 * 的功能,並且可以隨意地組合這些功能。 *   缺點:正因為可以隨意組合,所以就可能出現一些不合理地邏輯 * @author MoXingJian * @email 939697374@qq.com * @date 2016年12月11日 下午9:06:30 * @version 1.0 */public class PhoneDemo {     public static void main(String[] args) {          Phone p = new IPhone();          p.call();          System.out.println("-----------------------");          // 打電話前聽彩鈴          // 給手機添加彩鈴功能          RingPhoneDecorate rpd = new RingPhoneDecorate(p);          rpd.call();          System.out.println("-----------------------");          // 打完電話後看視頻          // 給手機添加播放視頻          PlayPhoneDecorate pd = new PlayPhoneDecorate(p);          pd.call();          System.out.println("-----------------------");          // 打電話前聽彩鈴,打完電話後播放視頻          RingPhoneDecorate r = new RingPhoneDecorate(new PlayPhoneDecorate(p));          r.call();          System.out.println("-----------------------");          // 類似的IO流也是裝飾者模式設計          InputStream is = System.in; // 位元組流          // 封裝          InputStreamReader isr = new InputStreamReader(is); // 字元流,單讀取一個          // 再封裝          BufferedReader bis = new BufferedReader(isr);          // 可以用一行來表示          // BufferedReader br = new BufferedReader(new InputStreamReader(System.in));          BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));                    //又或者是控制台錄入          //Scanner sc = new Scanner(System.in);     }}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.