免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

java設計模式筆記之裝飾模式

一、裝飾模式的定義

崇信網站建設公司創新互聯公司,崇信網站設計制作,有大型網站制作公司豐富經驗。已為崇信上1000+提供企業網站建設服務。企業網站搭建\成都外貿網站建設公司要多少錢,請找那個售后服務好的崇信做網站的公司定做!

裝飾模式是一種比較常見的模式,其定義如下:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.(動態地給一個對象添加額外的職責。就增加功能來說,裝飾模式相比生成子類更為靈活)

裝飾模式的通用類圖如圖:

java設計模式筆記之裝飾模式

Component抽象構件:Component是一個接口或者是抽象類,就是定義我們最核心的對象,也就是最原始的對象

ConcreteComponent具體構件:ConcreteComponent是最核心、最原始、最基本的接口或抽象類的實現,你要裝飾的就是它

Decorator裝飾角色:一般一個抽象類,做什么用呢?實現接口或抽象方法,這里面不一定有抽象的方法,在它的屬性里必然有一個private變量指向Component抽象構件

具體裝飾角色:ConcreteDecoratorA和ConcreteDecoratorB是兩個具體的裝飾類,你要把你最核心的、最原始的、最基本的東西裝飾成其他東西

抽象構件代碼:

public abstract class Component {
  //抽象的方法
  public abstract void operate();
}

具體構件代碼:

public class ConcreteComponent extends Component {
  @Override
  public void operate() {
    System.out.println("do somthing");
  }
}

抽象裝飾者:

public abstract class Decorator extends Component {
  private Component component = null;
 
  public Decorator(Component component) {
    this.component = component;
  }
 
  @Override
  public void operate() {
    this.component.operate();
  }
}

具體裝飾類:

public class ConcreteDecorator1 extends Decorator {
  public ConcreteDecorator1(Component component) {
    super(component);
  }
 
  private void method1() {
    System.out.println("method1 修飾");
  }
 
  @Override
  public void operate() {
    this.method1();
    super.operate();
  }
}
public class ConcreteDecorator2 extends Decorator {
  public ConcreteDecorator2(Component component) {
    super(component);
  }
 
  private void method2() {
    System.out.println("method2 修飾");
  }
 
  @Override
  public void operate() {
    this.method2();
    super.operate();
  }
}

場景類:

public class Client {
  public static void main(String args[]) {
    Component component = new ConcreteComponent();
    //第一次修飾
    component = new ConcreteDecorator1(component);
    //第二次修飾
    component = new ConcreteDecorator2(component);
    //修飾后運行
    component.operate();
  }
}

二、裝飾的優缺點和使用場景

優點:

裝飾類與被裝飾類可以獨立發展,而不會相互耦合。換句話說,Component類無需知道Decorator類,Decorator類是從外部擴展Component類的功能,而Decorator也不用知道具體的構件

裝飾模式是繼承關系的一個替代方案。我們看裝飾類Decorator,不管裝飾多少層,返回的還是Component,實現的還是is-a的關系

裝飾模式可以動態地擴展一個實現類的功能

缺點:

對于裝飾模式記住一點就夠了:多層的裝飾是比較復雜的,就像剝洋蔥,剝到了最后才發現是最里層的裝飾出現了問題,因此盡量減少裝飾類的數量,以便降低系統的復雜度。

使用場景:

需要擴展一個累的功能,或者給一個類增加附加功能
需要動態地給一個對象增加功能,這些功能可以再動態的撤銷
需要為一批兄弟累進行改裝或假裝功能,當然首選裝飾模式

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

標題名稱:java設計模式筆記之裝飾模式
標題鏈接:http://m.newbst.com/article42/jhssec.html

成都網站建設公司_創新互聯,為您提供服務器托管域名注冊網站排名網站維護自適應網站網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站建設網站維護公司