1. 程式人生 > >java 裝飾者模式 很詳細!

java 裝飾者模式 很詳細!

“`
//定義被裝飾者
public interface Human {
public void wearClothes();

public void walkToWhere();  

}

//定義裝飾者
public abstract class Decorator implements Human {
private Human human;

public Decorator(Human human) {  
    this.human = human;  
}  

public void wearClothes() {  
    human.wearClothes();  
}  

public void walkToWhere() {  
    human.walkToWhere();  
}  

}

//下面定義三種裝飾,這是第一個,第二個第三個功能依次細化,即裝飾者的功能越來越多
public class Decorator_zero extends Decorator {

public Decorator_zero(Human human) {  
    super(human);  
}  

public void goHome() {  
    System.out.println("進房子。。");  
}  

public void findMap() {  
    System.out.println("書房找找Map。。");  
}  

@Override  
public void wearClothes() {  
    // TODO Auto-generated method stub  
    super.wearClothes();  
    goHome();  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    super.walkToWhere();  
    findMap();  
}  

}

public class Decorator_first extends Decorator {

public Decorator_first(Human human) {  
    super(human);  
}  

public void goClothespress() {  
    System.out.println("去衣櫃找找看。。");  
}  

public void findPlaceOnMap() {  
    System.out.println("在Map上找找。。");  
}  

@Override  
public void wearClothes() {  
    // TODO Auto-generated method stub  
    super.wearClothes();  
    goClothespress();  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    super.walkToWhere();  
    findPlaceOnMap();  
}  

}

public class Decorator_two extends Decorator {

public Decorator_two(Human human) {  
    super(human);  
}  

public void findClothes() {  
    System.out.println("找到一件D&G。。");  
}  

public void findTheTarget() {  
    System.out.println("在Map上找到神祕花園和城堡。。");  
}  

@Override  
public void wearClothes() {  
    // TODO Auto-generated method stub  
    super.wearClothes();  
    findClothes();  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    super.walkToWhere();  
    findTheTarget();  
}  

}

//定義被裝飾者,被裝飾者初始狀態有些自己的裝飾
public class Person implements Human {

@Override  
public void wearClothes() {  
    // TODO Auto-generated method stub  
    System.out.println("穿什麼呢。。");  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    System.out.println("去哪裡呢。。");  
}  

}
//測試類,看一下你就會發現,跟java的I/O操作有多麼相似
public class Test {
public static void main(String[] args) {
Human person = new Person();
Decorator decorator = new Decorator_two(new Decorator_first(
new Decorator_zero(person)));
decorator.wearClothes();
decorator.walkToWhere();
}
}
“`這裡寫圖片描述

相關推薦

java 裝飾模式 詳細

“` //定義被裝飾者 public interface Human { public void wearClothes(); public void walkToWhere(); } //定義裝飾者 public a

java裝飾模式

裝飾者模式(Decorator),又叫包裝者模式(wapper) 意圖:動態地給一個物件新增一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。 因為參考網上說法都不太一樣,故按照我理解的意思描述下裝飾者模式,以希望給後來者一些稍微的指引: 通俗地說就是包裝物件,

JAVA----裝飾模式

JAVA裝飾者模式設計流程: 如果對於A要增強A的方法,即可採用裝飾者模式來實現。 定義一個B。其中B與A要實現同一介面,而在B中要提供一個帶引數的構造方法 Class A implements C; Class B implements C{

Java設計模式裝飾模式

解決 over 裝飾者模式 pack img 應該 ora 我們 lan 目錄      一、問題引入  二、設計原則  三、用裝飾者模式解決問題  四、裝飾者模式的特點  五、裝飾者模式的定義  六、裝飾者模式的實現  七、java.io包內的裝飾者模式

java代理模式裝飾模式

對象 tro 來看 彈性 java代理 question 設計模式 ava 設計 靜態代理和裝飾者模式的區別:   先來看一下裝飾者模式的定義:裝飾者模式動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。   總結一下采用裝飾者模式是為了增強或拓

JAVA設計模式之【裝飾模式

父類構造函數 sys scrollbar tex += result [] 對象 str JAVA設計模式之【裝飾者模式】 裝飾模式 對新房進行裝修並沒有改變房屋的本質,但它可以讓房子變得更漂亮、更溫馨、更實用。 在軟件設計中,對已有對象(新房)的功能進行擴展(

Java設計模式02-裝飾模式

繼承 cor tree 直接 分享 println extend fir tor 定義 動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。 類圖 (圖片來自headfirst 設計模式) Java實例 在網遊中通常有各式各樣的武器,還可以通過附

Java基礎-----裝飾模式

package cn.itcast.other; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileRead

java的23種設計模式裝飾模式

這裡給大家推薦一篇文章裡面介紹了23種設計模式https://www.aliyun.com/jiaocheng/811770.html; 下面則是我學習裝飾者的見解: 關於裝飾者模式運用的地方其實有很多,我第一次接觸到就是io流中,比如像這樣的: new InputStreamRea

淺談裝飾模式+JAVA I/O中的裝飾模式

1. 裝飾者模式 舉個栗子,假如在一家飲料店中有兩種飲料,分別是奶茶和咖啡,相對的有三種調料,蜂蜜、塊糖和摩卡,這樣消費者就有不同的消費組合,比如加糖摩卡咖啡、蜂蜜摩卡咖啡,加糖奶茶......如果飲料的種類或者調料的種類增多,那麼消費組合就會相應的增多,反映到程式設計程式碼上就會出現“類爆炸”

java設計模式--裝飾模式

照例搬一篇文章連線,我一般會選擇帶有uml圖的 方便理解,我只貼程式碼,因為我覺得別人理解的比我透徹,寫的比我好 http://www.cnblogs.com/stonefeng/p/5679638.html 裝飾者模式可以給物件新增一些額外的東西,設計模式那種書中舉例是星巴克的例子,如果每一種做

Java——裝飾設計模式

結合了一些百度百科的概念然後使用程式碼進行理解~ 裝飾者模式: 指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件一個物件的功能。它是通過建立一個包裝物件,也就是裝飾來包裹真實的物件。 使用場景: ​​​​​​​需要擴充套件一個類的功能,或給一個類新增附加

Java設計模式-裝飾模式

定義: 裝飾者是在不改變物件的情況下動態給物件新增屬性和行為,將責任動態的附加在物件上。 與繼承有類似功能即擴充套件功能。 裝飾者模式與繼承的區別: **繼承:**在子類擴充套件功能的時候是靜態的,並且是已知需要擴充套件的功能,是在編譯時實現的。 **裝飾者模式:**比繼承更

java設計模式精講 Debug 方式+記憶體分析 第11章 裝飾模式

裝飾者模式 11-1 裝飾者模式講解 11-2 裝飾者模式coding 11-3 裝飾者模式原始碼解析(spring-session mybatis jdk servlet) 11-1 裝飾者模式講解

Java 設計模式裝飾模式

本文為筆者學習《Head First設計模式》的筆記,並加入筆者自己的理解和歸納總結 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。 結構圖 雞尾酒Cocktail一般以伏特加(Vodka)、威士忌(Whisky)等烈酒或是葡萄

JAVA設計模式詳解(三)----------裝飾模式

今天LZ帶給大家的是裝飾者模式,提起這個設計模式,LZ心裡一陣激動,這是LZ學習JAVA以來接觸的第一個設計模式,也許也是各位接觸的第一個設計模式。記得當初老師在講IO的時候就提到過它:“是你還有你,一切拜託你。”沒錯,這就是裝飾者模式最簡潔的定義了。下面LZ引出標準的定義(

java之LineNumberReader類,裝飾模式,列印流,合併流(檔案合併和分割)和第三方工具類(FileNameUtils)

一.LineNumberReader類 public class Kll { public static void main(String[] args) throws IOException { File file = new File("

Stoker的Java學習之裝飾模式、列印流和合並流

Java學習之裝飾者模式、列印流和合並流 一.裝飾者模式( 解耦 不讓類和類產生繼承的關係) 在Java程式設計設計中,對已有物件的功能進行擴充套件。 把通用功能封裝在裝飾器中,用到的地方進行呼叫。 裝飾模式是一種用於替代繼承的技術,使用物件之間的關聯關係取代類

Stoker的Java學習之裝飾模式

Java學習之裝飾者模式 一.裝飾者模式(解耦 不讓類和類產生繼承的關係) 對 物件原有的功能進行升級 書寫步驟: 1.明確被裝飾的物件 2.將被裝飾的物件 通過構造方法傳入 裝飾類 裝飾類中 肯定有 一個成員變數 就是 被裝飾的物件 3.擁有被裝飾的物件 相當

從原始碼角度理解Java設計模式——裝飾模式

一、飾器者模式介紹 裝飾者模式定義:在不改變原有物件的基礎上附加功能,相比生成子類更靈活。 適用場景:動態的給一個物件新增或者撤銷功能。 優點:可以不改變原有物件的情況下動態擴充套件功能,可以使擴充套件的多個功能按想要的順序執行,以實現不同效果。 缺點:更多的類,使程式複雜 型別:結構型。 類圖