作爲一個Java小白,面向對象編程的幾個特性:封裝\繼承\多態,我一直真正瞭解的不多.這個模式卻讓我一下理解了多態的好處:它可以很方便的對系統進行解耦.廢話不講,上代碼和註釋
1.公共接口
public interface Appearance{
void draw();
}
2.基本實現類和一個用作裝飾別的Appearance子類的抽象類
//這裏列出來兩個基本實現類
public class Circle implements Appearance{
@override
public void draw(){
System.out.println("畫個圓形");
}
}
public class Rectangle implements Appearance{
@override
public void draw(){
System.out.println("畫個矩形");
}
//一個裝飾Appearance子類的抽象類
public abstract class AppearanceDecorator implements Appearance{
//聲明爲proteced可以被子類繼承
protected Appearance decoratedAppearance;
public AppearanceDecorator(Appearance decoratedAppearance){
this.decoratedAppearance = decoratedrAppearance;
}
@override
public void draw(){
decoratedAppearance.draw();
}
}
3.裝飾的具體實現類
public class RedAppearanceDecorator extends AppearanceDecorator{
public RedAppearanceDecorator(Appearance decoratedAppearance){
super(decoratedAppearance);
}
private void setRedBorder(){
System.out.println("進行鑲邊");
System.out.println("done!紅色鑲邊");
}
@override
public void draw(){
decoratedAppearance.draw();
setRedBorder();
}
}
接下來:用測試類來測試一下即可:
public class Test{
public static void(String[] args){
Appearance circle = new Circle();
circle.draw();
Appearance rectangle = new Rectangle();
rectangle.draw();
Appearance redCircle = new RedAppearanceDecorator( new Circle() );
redCircle.draw();
}
}
最後,簡單一提,學習設計模式一方面是要加深對java體系的理解,另一方面也是增長自己的設計能力.
在Java的io操作中,
BufferedWirter \ OutputStreamWriter 是Writer的子類
其中BufferedWriter就是具體的裝飾類.以後,會結合具體的Java或者Andoid源代碼進行講解.
源代碼我現在閱讀起來還有些費力氣,但是最起碼要有讀源代碼的意識,這是開發者必備的技能.