1. 程式人生 > >設計模式筆記之裝飾者模式(Decorator Pattern)

設計模式筆記之裝飾者模式(Decorator Pattern)

一、概述:

蛋糕店賣蛋糕,有基本的底,如奶油蛋糕,允許客戶訂製配置,如:加草莓,加巧克力,結賬方式:底+配置(裝飾)

二、分析:
除了基本的底之外所有的配置,都是裝飾者,可以將其抽象出一個介面,蛋糕底也有多樣,也可以建立一個藉口

三、解決方法:

1.建立蛋糕底介面:

/**
 * 蛋糕底介面
 * @author yu
 *
 */
public interface Cake {
 /**
  * 結賬方法
  * @return
  */
 public float cost();
}

2.定義蛋糕底:
/**
 * 蛋糕底,如奶油蛋糕
 * @author yu
 *
 */
public class MilkCake implements Cake {
 private float price = 100f;
 @Override
 public float cost() {
  return price;
 }
}

3.定義蛋糕的裝飾者介面:
public abstract class CakeDecorator implements Cake {
 
}

4.定義裝飾者:
/**
 * 加了巧克力的蛋糕
 * @author yu
 *
 */
public class ChrolateCake extends CakeDecorator {
 private Cake cake;
 private float price = 10f;   //巧克力的價格
 public ChrolateCake(Cake cake){
  this.cake = cake;
 }
 /**
  * 計算加了巧克力後的價格
  */
 @Override
 public float cost() {
  return cake.cost() + price;
 }
}
5。測試,訂製蛋糕,並計算價格:
MilkCake m = new MilkCake(); //選擇了奶油蛋糕底
ChrolateCake cc= new ChrolateCake(m); //加了巧克力
System.out.println(cc.cost());
在此模式中除了主題(蛋糕底)之外,所有的配置(櫻桃,巧克力等)都是裝飾者,實際中可以根據尋求往主題上新增,只要在new裝飾者時將最後的實現了Cake介面的類傳進去就OK了

四、小結:

裝飾者模式在java.io包中使用的最為廣泛,典型的一層套一層的做法,原有的輸入流不具有某些方法,可以在外面套一層,就可以利用其特殊的方法了,如:

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = null;
s = br.readLine();



相關推薦

設計模式筆記裝飾模式Decorator Pattern

一、概述:蛋糕店賣蛋糕,有基本的底,如奶油蛋糕,允許客戶訂製配置,如:加草莓,加巧克力,結賬方式:底+配置(裝飾)二、分析:除了基本的底之外所有的配置,都是裝飾者,可以將其抽象出一個介面,蛋糕底也有多樣,也可以建立一個藉口三、解決方法:1.建立蛋糕底介面:/** * 蛋糕底

《Head First 設計模式裝飾模式

的人 開放 override ext es2017 必須 想要 ret ted 前言:   時間過得挺快的,轉眼間就到了十月中旬了,再晃著晃著新的一年就要來臨。今天lz有幸來到了浙大圖書館來學習,想想自己已經畢業兩年了,今日再次踏進校園裏,心裏頗有一絲感悟,說不出來,只有把

23種設計模式學習裝飾模式

eth light 裝飾者模式 per int ring ava 功能 接口 裝飾著模式是動態的增強類的功能,要求被裝飾的類必選實現了某個接口 被裝飾類接口 public interface Source { void method1(); } 被裝飾類

JAVA設計模式初探裝飾模式

這個模式花費了挺長時間,開始有點難理解,其實就是 定義:動態給一個物件新增一些額外的職責,就象在牆上刷油漆.使用Decorator模式相比用生成子類方式達到功能的擴充顯得更為靈活。設計初衷:通常可以使用繼承來實現功能的拓展,如果這些需要拓展的功能的種類很繁多,那麼勢必生成很

Java設計模式系列裝飾模式

color http span alt uml 9.png 模式 方案 image 裝飾者模式的定義 動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案 裝飾者模式的UML類圖 Java設計模式系列之裝飾者模式

設計模式——裝飾模式Decorator Pattern

    裝飾者模式:動態將責任附加到物件上,要拓展功能,提供了比繼承更有彈性的方案。 很多文章也是拿了書上的例子來講,同時寫到,有的調料裝飾者都必須實現 getDescription() 大家可以先考慮下,稍後我們會說。最後都是沒說,還有思考的

【知了堂學習筆記】_Java中設計模式裝飾模式的學習

請關注“知了堂學習社群”,地址:http://www.zhiliaotang.com/portal.php 裝飾者模式 一、定義 23種設計模式之一,英文叫Decorator Pattern,又叫裝飾者模式。裝飾模式是在不必改變原類檔案和使用繼承的情況下

設計模式裝飾模式

一點 ron 測試類 實現類 stub generated class void nbsp 一.裝飾者模式特點:1.裝飾者和被裝飾者對象有相同的超類2.可以用一個或多個裝飾者包裝一個對象3.由於裝飾者和被裝飾者具有相同超類,所以任何需要被包裝對象的場合,可以用裝飾過的對象代

JDK設計模式——裝飾模式(適配器模式)

div rgs static eight 裝飾者 參數 decorator 裝飾器 方式 假定已經有三個類A,B和C他們的繼承關系如下                      ClassA Class B extends A Class C

C#設計模式(9)——裝飾模式Decorator Pattern

pre 現在 接受 () spa 對象 如何 缺點 重寫 一、引言 在軟件開發中,我們經常想要對一類對象添加不同的功能,例如要給手機添加貼膜,手機掛件,手機外殼等,如果此時利用繼承來實現的話,就需要定義無數的類,如StickerPhone(貼膜是手機類)、Accessori

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

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

設計模式 - 裝飾模式

一、什麼是裝飾者模式 裝飾著模式:簡單的一句話理解就是,動態的給一個物件新增一些額外的功能,裝飾者模式相對於生成子類更加的靈活。 我們來看下裝飾者模式的UML圖: 二、裝飾者模式的構成 Component(抽象構件):它是裝飾類和具體構件的公共父類;

設計模式觀察-Java簡單例子

1、定義:源於GOF的Design Patterns一書。 Define a one-to-many dependency between objects so that when oneobject changes state, all its dependents are notifie

Java 設計模式裝飾模式

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

設計模式學習筆記二------裝飾模式

設計原則: 少用繼承,多用組合 類應該對擴充套件開放,對修改關閉 目錄 本文的結構如下: 什麼是裝飾者模式 為什麼要用該模式 模式的結構 程式碼示例 優點和缺點 適用環境 總結 一、什麼是裝飾模式 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝

22、設計模式裝飾模式

抽象商品類 /** * 商品 */ public abstract class AbstractGoods { public abstract String getName() ; public abstract Double getPrice();

設計模式學習觀察模式Observer

a、效能降低。       在許多實現中,觀察器的 update() 方法可能與主體在同一執行緒中執行。如果觀察器列表很長,則執行 Notify() 方法可能需要很長時間。抽取物件依賴性並不意味著新增觀察器對應用程式沒有任何影響。 b、記憶體洩漏。        在 Observer 中使用的回撥機制(當物

ES6設計模式裝飾模式

就是不修改原來的物件的情況下,對物件的功能進行擴充的一種方法。遵循的是開放封閉原則,類可以擴充但是不可以修改。 各種粥裡面有不同的調料,不同的調料可以加不同的量,最後粥的價錢不等。下面是es實現: // 注意粥裡面可以加入不同的調料,調料不一樣價錢不一樣。 class Porridge{ constru

設計模式裝飾模式大概思想

什麼是裝飾者模式呢,為什麼要用裝飾者模式,用了會有什麼好處呢? 那麼下來我給大家介紹一下什麼是裝飾者模式: 裝飾者模式見名知意就是給前面寫的東西裝飾一下,讓它變成對我們最有用的一方面,在面向介面程式設計中有很廣泛的應用。 官方的話是這樣講的:裝飾模式指的是在不必改變原類檔案和使用繼承的情

Android設計模式裝飾模式(Decorator Pattern)

概論 在Android原始碼裡很多時候會看到這個模式。下面來講一些這個模式。 裝飾者模式主要的優點是動態給一個物件新增一些額外的職責。使用Decorator模式相比用生成子類方式達到功能的擴充顯得更為靈活。缺點是,要建立比繼承更多的物件。 先來個熱身,