日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

装饰模式概述和使用

發布時間:2024/4/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 装饰模式概述和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

裝飾設計模式

裝飾設計模式概述

裝飾模式就是使用被裝飾類的一個子類的實例,在客戶端將這個子類的實例交給裝飾類。是繼承的替代方案

優點

使用裝飾模式,可以提供比繼承更靈活的擴展對象的功能,它可以動態的添加對象的功能,并且可以隨意的組合這些功能

缺點

正因為可以隨意組合,所以就可能出現一些不合理的邏輯

package cn.learn_02;public class IPhone implements Phone {@Overridepublic void call() {System.out.println("手機可以打電話了");}} package cn.learn_02;public class MusicPhoneDecorate extends PhoneDecorate {public MusicPhoneDecorate(Phone p) {super(p);}@Overridepublic void call() {super.call();System.out.println("手機可以聽音樂");} } package cn.learn_02;public interface Phone {public abstract void call(); } package cn.learn_02;public abstract class PhoneDecorate implements Phone {private Phone p;public PhoneDecorate(Phone p) {this.p = p;}@Overridepublic void call() {this.p.call();} } package cn.learn_02;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.Scanner;public class PhoneDemo {public static void main(String[] args) {Phone p = new IPhone();p.call();System.out.println("------------");// 需求:我想在接電話前,聽彩鈴PhoneDecorate pd = new RingPhoneDecorate(p);pd.call();System.out.println("------------");// 需求:我想在接電話后,聽音樂pd = new MusicPhoneDecorate(p);pd.call();System.out.println("------------");// 需求:我要想手機在接前聽彩鈴,接后聽音樂// 自己提供裝飾類,在打電話前聽彩鈴,打電話后聽音樂pd = new RingPhoneDecorate(new MusicPhoneDecorate(p));pd.call();System.out.println("----------");// 想想我們在IO流中的使用// InputStream is = System.in;// InputStreamReader isr = new InputStreamReader(is);// BufferedReader br = 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);} } package cn.learn_02;public class RingPhoneDecorate extends PhoneDecorate {public RingPhoneDecorate(Phone p) {super(p);}@Overridepublic void call() {System.out.println("手機可以聽彩鈴");super.call();} }

?

總結

以上是生活随笔為你收集整理的装饰模式概述和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。