一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java設計模式筆記之裝飾模式

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

2021-07-27 11:47孟凡勇 Java教程

這篇文章主要為大家詳細介紹了java設計模式筆記之裝飾模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、裝飾模式的定義

裝飾模式是一種比較常見的模式,其定義如下: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是兩個具體的裝飾類,你要把你最核心的、最原始的、最基本的東西裝飾成其他東西

抽象構件代碼:

?
1
2
3
4
public abstract class component {
  //抽象的方法
  public abstract void operate();
}

具體構件代碼:

?
1
2
3
4
5
6
public class concretecomponent extends component {
  @override
  public void operate() {
    system.out.println("do somthing");
  }
}

抽象裝飾者:

?
1
2
3
4
5
6
7
8
9
10
11
12
public abstract class decorator extends component {
  private component component = null;
 
  public decorator(component component) {
    this.component = component;
  }
 
  @override
  public void operate() {
    this.component.operate();
  }
}

具體裝飾類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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();
  }
}

場景類:

?
1
2
3
4
5
6
7
8
9
10
11
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的關系

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

缺點:

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

使用場景:

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本一区视频在线 | 日韩操比视频 | 114级毛片免费观看 1024亚洲天堂 | 草馏社区最新1024 | ipx 在线播放| 草莓视频旧版本 | 国产欧美亚洲精品第一页青草 | 婷婷日日夜夜 | 丰满的闺蜜2中文字幕 | 日韩欧美亚洲一区精选 | 国产精品久久国产精品99 | 国产午夜免费 | 俄罗斯海滩厕所偷窥 | 国内精品视频九九九九 | 国产精品久久久久毛片 | 俺去俺来也在线www色官网 | 日本 在线观看 | 四虎成人4hutv影院 | 日韩亚洲人成在线综合 | 我的奶头被客人吸的又肿又红 | 啪哆哆 | 欧美日韩国产精品自在自线 | 午夜成私人影院在线观看 | 亚洲一区二区成人 | 小莹的性荡生活45章 | 男女激情视频1000辣妞范 | 男女性潮高片无遮挡禁18 | 欧美在线成人免费国产 | 五月香婷| 师尊被各种play打屁股 | 免费观看视频在线播放 | 日本片免费观看一区二区 | 91porn最新地址 | 国产人成77777视频网站 | 久久九九久精品国产尤物 | 国产精品嫩草影院一二三区入口 | 2018天天拍拍拍免费视频 | 好舒服好爽再快点视频 | 久久毛片免费看一区二区三区 | 青春娱乐国产分类精品二 | 欧美一级在线全免费 |