生活随笔
收集整理的這篇文章主要介紹了
装饰者设计模式,简单代码实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/**裝飾者模式* 裝飾者模式就是使用被裝飾類的一個子類的實例,在客戶端將* 這個子類的實例交給裝飾類。是集成的替代方案* 優點:使用裝飾模式,可以提供比繼承更靈活的擴展對象的功能,它可以動態的添加對象* 的功能,并且可以隨意地組合這些功能。* 缺點:正因為可以隨意組合,所以就可能出現一些不合理地邏輯*///首先創建手機類接口
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{@Overridepublic 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;}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}
}
總結
以上是生活随笔為你收集整理的装饰者设计模式,简单代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。