設計模式-裝飾模式概述和使用-IO流
裝飾設計模式概述
裝飾模式就是使用被裝飾類的一個子類的例項,在客戶端將這個子類的例項交給裝飾類。是繼承的替代方案
優點
使用裝飾模式,可以提供比繼承更靈活的擴充套件物件的功能,它可以動態的新增物件的功能,並且可以隨意的組合這些功能
缺點
正因為可以隨意組合,所以就可能出現一些不合理的邏輯
package cn.itcast_02;
public interface Phone {
public abstract void call();
}
package cn.itcast_02;
public class IPhone implements Phone {
@Override
public void call() {
System.out.println("手機可以打電話了");
}
}
package cn.itcast_02;
public abstract class PhoneDecorate implements Phone {
private Phone p;
public PhoneDecorate(Phone p) {
this.p = p;
}
@Override
public void call() {
this.p.call();
}
}
package cn.itcast_02;
public class RingPhoneDecorate extends PhoneDecorate {
public RingPhoneDecorate(Phone p) {
super(p);
}
@Override
public void call() {
System.out.println("手機可以聽彩鈴");
super.call();
}
}
package cn.itcast_02;
public class MusicPhoneDecorate extends PhoneDecorate {
public MusicPhoneDecorate(Phone p) {
super(p);
}
@Override
public void call() {
super.call();
System.out.println("手機可以聽音樂");
}
}
package cn.itcast_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流中的使用,裝飾模式在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);//也相當於裝飾
}
}
相關文章
- 設計模式(九)——裝飾者模式(io原始碼分析)設計模式原始碼
- 設計模式——裝飾模式設計模式
- 設計模式-裝飾模式設計模式
- c++設計模式-裝飾器模式和代理模式C++設計模式
- [設計模式]裝飾者模式設計模式
- [設計模式] 裝飾器模式設計模式
- 設計模式-裝飾器模式設計模式
- 設計模式——裝飾者模式設計模式
- 設計模式----裝飾器模式設計模式
- 設計模式-裝飾者模式設計模式
- 裝飾設計模式設計模式
- 軟體設計模式————(裝飾模式)設計模式
- java設計模式--裝飾器模式Java設計模式
- 設計模式之裝飾者模式設計模式
- GoLang設計模式21 - 裝飾模式Golang設計模式
- 設計模式(六):裝飾器模式設計模式
- 設計模式之-裝飾器模式設計模式
- 設計模式之【裝飾器模式】設計模式
- 極簡設計模式-裝飾模式設計模式
- 設計模式-裝飾模式(Decorator Pattern)設計模式
- 設計模式(八)裝飾器模式設計模式
- 設計模式系列之「裝飾模式」設計模式
- 設計模式--裝飾模式(Decorator Pattern)設計模式
- 小白設計模式:裝飾者模式設計模式
- Python設計模式-裝飾器模式Python設計模式
- 設計模式學習-使用go實現裝飾模式設計模式Go
- Decorator裝飾設計模式設計模式
- Java設計模式系列-裝飾器模式Java設計模式
- 23種設計模式:03裝飾模式設計模式
- java設計模式之裝飾器模式Java設計模式
- Java設計模式之裝飾者模式Java設計模式
- 設計模式系列10–裝飾者模式設計模式
- PHP設計模式- Decorator 裝飾器模式PHP設計模式
- PHP設計模式之裝飾者模式PHP設計模式
- Go 設計模式之裝飾器模式Go設計模式
- 設計模式之裝飾者模式(二)設計模式
- 設計模式之裝飾者模式(一)設計模式
- Java設計模式(3)-裝飾者模式Java設計模式
- Java 設計模式(五)《裝飾器模式》Java設計模式