設計模式筆記之裝飾者模式(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.定義裝飾者:
5。測試,訂製蛋糕,並計算價格:/** * 加了巧克力的蛋糕 * @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; } }
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模式相比用生成子類方式達到功能的擴充顯得更為靈活。缺點是,要建立比繼承更多的物件。 先來個熱身,