裝飾者模式(一)
背景
假設我們現在要為沙縣小吃建立一個應用程式,我們需要對沙縣小吃進行建模。假設一開始他們提供了雞腿飯、鴨腿飯、大肉面三種飯。剛剛開始的時候我們使用了繼承來實現,而且將公共的操作放在了抽象的Snack類中。
每種飯的價格不一樣,所以在每個子類中都重寫了getCost()方法。現在顧客除了點雞腿飯、鴨腿飯、大肉面之外,還想加上青菜、蒸蛋、土豆以及再加一個雞腿等等需求。按照現在的方式針對上面的需求有兩種實現方式。
第一種
將加了額外項的看成是一個獨立的菜種繼承Snack,並覆蓋它的getCost()方法,在這個方法中計算價格。
以這種方式來實現的缺點是每增加一種配菜就需要增加一個子類,隨著時間的推移會出現很多類,這到後期會導致專案很難維護。
第二種方式
在父類中定義配菜以及是否存在配置的方法以及一個獲取價格的方法(getCost),在子類中覆蓋父類的
使用這種方式,存在一下幾個缺點:
- 一旦出現新的配菜,我們就需要在父類中增加新的方法,並修改getCost方法
- 並不是每個配菜都適合所有的飯,這樣就造成類方法的冗餘
- 很難處理客戶給飯加雙份配菜的情況
相關推薦
裝飾者模式(一)
背景 假設我們現在要為沙縣小吃建立一個應用程式,我們需要對沙縣小吃進行建模。假設一開始他們提供了雞腿飯、鴨腿飯、大肉面三種飯。剛剛開始的時候我們使用了繼承來實現,而且將公共的操作放在了抽象的Snack類中。 每種飯的價格不一樣,所以在每個子類中都重寫了ge
.NET/ASP.NETMVC 深入剖析 Model元資料、HtmlHelper、自定義模板、模板的裝飾者模式(一)
閱讀目錄: 1.開篇介紹 2.Model與View的使用關係(資料上下文DataContext與View呈現) 3.Metadata元資料驅動設計(如何使用中間層元資料來驅動最終的行為) 4.ASP.NETMVC ModelMetadata(ModelMetadata元資料如何支撐Model與Vi
設計模式(十一)裝飾者模式(Decorator)-結構型
裝飾者模式Decorator 在程式開發中,有時候開發人員會使用繼承來擴充套件物件的功能,使用者的需求是多變的,也就造成了使用繼承會造成程式碼的大範圍改動,其實擴充套件物件的功能,採用組合比繼承要好的多,當用戶需要變動時,只要將物件組合發生變化就可以了,不會大
Java設計模式之觀察者模式(一)
觀察者模式:Observer 觀察者模式主要用於1:N的通知,當一個物件(目標物件subject或Observable)的狀態變化時,他需要及時告知一系列物件(觀察者Observer),令他們做出相應 通知觀察者的方式有兩種,分
再談裝飾者模式(總結)
在之前的文章 淺談裝飾者模式+JAVA I/O中的裝飾者模式 中,淺談了一下裝飾者模式,這篇文章來總結一下裝飾者模式。 裝飾者模式遵循開放-關閉原則,即,類應該對擴充套件開放,對修改關閉; 用執行時擴充套件來取代編譯時繼承; 解決了繼承濫用的問題; 用物件
設計模式--觀察者模式(一)
1.unity 目錄結構如下: 2. canvas 下掛如下四個指令碼 Subject.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using
建造者模式(一)
建造者模式 一、建造者模式的定義 將一個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示,建造者模式是一步步建立一個複雜的物件,它允許使用者只通過指定複雜物件型別和內容就可以構建他們,使用者不需要知道內部的具體構造細節。 二、模式的理解
javascript設計模式-裝飾者模式(9)
裝飾者是一種為物件新增新特性的技術,它並不適用建立新子類的這種手段。裝飾者模式可以用來透明的把物件包裝在具有同樣介面的另一個物件之中。這樣我們就可以為物件新增一個方法或者一些行為,然後將方法呼叫傳
.NET/ASP.NETMVC 深入剖析 Model元資料、HtmlHelper、自定義模板、模板的裝飾者模式(二)
閱讀目錄: 4.ModelMetadata(ModelMetadata元資料如何支撐Model與View之間的組合關係) 4.1.ModelMetadata元資料結構(元資料與資料實體的結構關係) 4.2.View與Model的基本關係及使用方式(View的呈現基礎) 5.通過對Vie
.NET/ASP.NETMVC 深入剖析 Model元資料、HtmlHelper、自定義模板、模板的裝飾者模式(三)
閱讀目錄: 7.HtmlHelper、HtmlHelper<T>中的ViewModel的型別推斷 8.控制ViewModel中的某個屬性的呈現(使用PartialView部分檢視細粒度控制ViewModel的呈現) 9.模板的裝飾者模式(PartialView與ViewModel的巢狀使用(
【設計模式】-裝飾者模式(Wrapper)
實在覺得搜狗輸入法流氓,於是就在剛剛解除安裝掉了。因為搜狗輸入法“慣”出的懶散病也該得到治療了。言歸正傳--“裝飾者模式” 裝飾者模式實際上就是將“父物件”的職責動態地加在“子物件”之上,“子物件”可以根據需要,在本有職責的基礎上新增其他的業務。換句話說,若要拓展功能,裝
複雜物件的組裝與建立——建造者模式(一)
沒有人買車會只買一個輪胎或者方向盤,大家買的都是一輛包含輪胎、方向盤和發動機等多個部件的完整汽車。如何將這些部件組裝成一輛完整的汽車並返回給使用者,這是建造者模式需要解決的問題。建造者模式又稱為生成器模式,它是一種較為複雜、使用頻率也相對較低的建立型模式。建造
釋出者訂閱者模式(一)
自己畫了個圖 demo是用了兩個場景來描述的,一個是找工作(查的資料),一個是購物,仿照寫的,為了加深理解,根據名字可以知道訂閱者和釋出者,然後實體類分別取實現這兩個介面類,來看訂閱者 package com.fanyafeng.obser; /** * Create
協調多個物件之間的互動——中介者模式(一)
騰訊公司推出的QQ作為一款免費的即時聊天軟體深受廣大使用者的喜愛,它已經成為很多人學習、工作和生活的一部分(不要告訴我你沒有QQ哦,)。在QQ聊天中,一般有兩種聊天方式:第一種是使用者與使用
裝飾者模式(decorator)--給愛用繼承的人一個全新的設計眼界
[color=red][b]裝飾者模式:動態的將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。 設計原則:對擴充套件開放,對修改關閉。 [/b][/color]jdk中io採用了這種設計模式,來看一下io的類圖先。 [img]http://dl.i
複雜物件的組裝與建立——建造者模式(一):遊戲角色設計,模式概述
沒有人買車會只買一個輪胎或者方向盤,大家買的都是一輛包含輪胎、方向盤和發動機等多個部件的完整汽車。如何將這些部件組裝成一輛完整的汽車並返回給使用者,這是建造者模式需要解決的問題。建造者模式又稱為生成器模式,它是一種較為複雜、使用頻率也相對較低的建立型模式。建造者
設計模式(一)觀察者模式
針對 ray 需求 als bool 模式 null rri 主動 觀察者模式 定義了對象之間的一對多的依賴,這樣一來,當一個對象狀態改變時,他的 多有依賴都會受到通知並自動更新。 本例為一個溫度基站,和三個終端。溫度基站為廣播類WeatherData,三個終端監聽者類分別
7,裝飾者模式(Decorator Pattern)動態的給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活。繼承關系的一個替換方案。
做到 活性 splay .com 重新 裝飾 run play 情況 裝飾( Decorator )模式又叫做包裝模式。通過一種對客戶端透明的方式來擴展對象的功能,是繼承關系的一個替換方案。 裝飾模式就是把要添加的附加功能分別放在單獨的類中,並讓這個
設計模式-(14)裝飾者模式 (swift版)
實現 info 有一個 istview listview 接口 tor true lis 一,概念 裝飾者模式(Decorator):動態地為一個對象添加一些額外的職責,若要擴展一個對象的功能,裝飾者提供了比繼承更有彈性的替代方案。 多組合,少繼承 二,UML圖
設計模式(一)建造者模式
單實例 抽象類 原型 sys 數組 組合 cto 簡單 builder GOF論述了23種設計模式,它們有3個分類————創建型模式、結構型模式、行為模式。此篇為創建型模式創建型模式抽象了實例化的過程,它們可以幫助某個系統獨立於如何創建、組合以及表示該系統所包含的對象。當系