国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java設計模式之裝飾器模式(Decorator)

2019-11-26 13:20:37
字體:
來源:轉載
供稿:網友

概述

裝飾模式是對客戶端以透明的方式擴展對象的功能,是繼承關系的一個替代方案。也就是說,客戶端并不會覺得對象在裝飾前和裝飾后有什么不同,裝飾模式可以在不用創造更多子類的情況下,將對象的功能加以擴展,裝飾模式的關鍵在于這種擴展是完全透明的。

模式的結構

UML類圖:

裝飾模式中的類角色:
抽象構件角色(Project):給出一個接口,以規范準備接收附加責任的對象
具體構件角色(Employe):定義一個將要接收附加責任的類
裝飾角色(Manager):持有一個構件對象的實例,并定義一個與抽象構件接口一致的接口
具體裝飾角色(ManagerA,ManagerB):負責給構件對象“貼上”附加的責任

代碼示例

package interview;interface Project{  void doCoding();}class Employe implements Project{  @Override  public void doCoding() {    System.out.println("工程師在編程......");  }}class Manager implements Project{  private Project project;  public Manager(Project project){    this.project = project;  }  @Override  public void doCoding() {    startNewWork();    project.doCoding();  }  public void startNewWork(){}}class ManagerA extends Manager{  public ManagerA(Project project) {    super(project);  }  @Override  public void startNewWork() {    System.out.println("開發經理開始新的工作計劃");  }}class ManagerB extends Manager{  public ManagerB(Project project) {    super(project);  }  @Override  public void startNewWork() {    System.out.println("測試經理開始新的工作計劃");  }}public class MainTest {  public static void main(String arg[]) {    Project project = new Employe();    Project managerA = new ManagerA(project);    Project managerB = new ManagerB(project);    managerA.doCoding();    managerB.doCoding();  }}

裝飾模式優缺點:

優點:

裝飾模式與繼承的目的都是要擴展對象的功能,但是裝飾模式可以提供比繼承更多的靈活性。裝飾模式允許系統動態決定“貼上”一個需要的“裝飾”,繼承關系則不同,繼承關系是靜態的,它在系統運行前就決定了。
通過使用不同的具體裝飾類以及這些裝飾類的組合,設計師可以創造很多不同的行為組合。

缺點:

由于使用裝飾模式,可以比使用繼承關系需要較少數目的類。使用較少的類,當然使設計比較易于進行。但是,在另一方面,使用裝飾模式會產生比使用繼承關系更多的對象。更多的對象會使得差錯變得困難,特別是這些對象看上去都很像。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沧源| 明溪县| 吉木萨尔县| 临城县| 冕宁县| 大方县| 平潭县| 探索| 淮北市| 绥江县| 清镇市| 五寨县| 安龙县| 余姚市| 西青区| 湾仔区| 惠安县| 米易县| 滁州市| 安康市| 宁国市| 商南县| 汽车| 巴马| 葫芦岛市| 彭山县| 阿瓦提县| 马公市| 土默特右旗| 夹江县| 高唐县| 长葛市| 西林县| 江永县| 光泽县| 奇台县| 昂仁县| 静乐县| 城步| 长海县| 安陆市|