本篇供個人學習使用,有問題歡迎討論
decorator pattern,能夠在不修改目標類也不使用繼承的情況下,動態地擴充套件乙個類的功能。它是通過建立乙個包裝物件,也就是裝飾者來達到增強目標類的目的的。
裝飾者設計模式的實現有兩個要求:
這兩個要求的目的是,在裝飾者類中的方法可以呼叫目標類的方法,以增強這個方法。而增強的這個方法是通過重寫的方式進行的增強,所以要求實現相同的介面或繼承相同的抽象類。
在裝飾者設計模式中,裝飾者類一般是不對目標類進行增強的。裝飾者類作為乙個基類,具體的裝飾者繼承自這個基類,對目標類進行具體的、單功能的增強。這樣做的好處是,在很方便的情況下可以實現多重地、組合式地增強。
1、基本用法
如實現對乙個字串的大寫功能:
isomeservice(介面):
public
inte***ce
isomeservice
someserviceimpl(目標類):
public
class
someserviceimpl
implements
isomeservice
}
someservicedecorator(裝飾者):
public
class
someservicedecorator
implements
isomeservice
public string dosome()
}
測試:
public
class
test02
}
2、高階用法
如實現對乙個字串的大寫和忽略前後空白的功能:
isomeservice(介面):
public
inte***ce
isomeservice
someserviceimpl(目標類):
public
class
someserviceimpl
implements
isomeservice
}
public
class
implements
isomeservice
//通過帶參構造器傳入目標物件
public
(isomeservice target)
//呼叫目標類的目標方法,但不對其進行任何的增強
public string dosome()
}
trimdecorator(具體裝飾者):
要繼承自裝飾者基類要有帶參構造器具體裝飾者只對裝飾者基類業務方法進行某一種單一的增強
public
class
trimdecorator
extends
public
trimdecorator
(isomeservice target)
//重寫基類的業務方法
public string dosome()
}
touppercasedecorator(具體裝飾者):
public
class
touppercasedecorator
extends
public
touppercasedecorator
(isomeservice target)
public string dosome()
}
測試:
public
class
test02
}
輸出結果(使用「裝飾者」之前):
使用「裝飾者」之後:
isomeservice(介面):
public
inte***ce
isomeservice
someserviceimpl(目標類):
public
class
someserviceimpl
implements
isomeservice
}
otherserviceproxy(靜態**類):
public
class
otherserviceproxy
implements
isomeservice
public string dosome()
}
測試:
public
class
test03
}
靜態**類與裝飾者間的共同點都要實現與目標類相同的業務介面
這兩個類中都要宣告目標物件
都可以在不修改目標類的前提下增強目標方法
靜態**類與裝飾者間的區別
使用目的不同
裝飾者的使用目的是:就是增 強目標物件
靜態**的使用目的是:是為保護和隱藏目標物件
對於目標物件的獲取方式不同
裝飾者類中目標物件的獲取:通過帶參構造器傳入
靜態**中目標物件的獲取:在無參構造器中直接建立
功能增強的實現者不同
裝飾者設計模式中存在裝飾者基類,其並不真正實現增強,而是=由具體的裝飾者進行功能增強的,所以存在乙個 「 裝飾者鏈 「 的概念
靜態**設計模式中一般不存在父子類的關係,具體的增強,就是由**類完成,無需其子類完成,所以不存在 「 鏈 」 的概念
簡單的裝飾者模式
裝飾者模式主要用來擴充套件功能的,不會改變原來物件的功能,只做擴充套件 版本一 如下 public abstract class beefnoodlepublic class basebeefnoodle extends beefnoodle public int getprice public c...
裝飾者設計模式
裝飾者模式 動態地給乙個物件新增一些額外的職責,就增加功能來說,decorator模式比生成子類更為靈活。讓decorator物件為自己新增功能。有時候使用concretecomponent的派生類提供核心功能,在這種情況就是用concretecomponent替代了component的功能,而且裝...
裝飾者設計模式
package 模式練習部分 首先建立,手機介面,然後建立最基本功能的手機,也就是只有接 功能的手機,然後在這個基礎上在設計乙個裝飾類 開始具體的裝飾過程,按照本例中的步驟,下面要做的就是對於具體裝飾者的建立,先有彩鈴,然後開始接 然後在接完 以後,沒有什麼其他的事情了,開始看會兒電視休息一下。建立...