成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何動態地給一個類增加功能?

開發 前端
裝飾器模式(Decorator Pattern):動態的給一個對象添加額外的職責,就增加功能來說, 裝飾模式相比生成子類更為靈活。

哈嘍,大家好,我是指北君。

今天給大家介紹另一種常用的設計模式——裝飾器模式。

1.什么是裝飾器模式?

Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.

裝飾器模式(Decorator Pattern):動態的給一個對象添加額外的職責,就增加功能來說, 裝飾模式相比生成子類更為靈活。

說人話:一般的,我們為了擴展一個類經常使用繼承方式實現,隨著擴展功能的增多,子類會很膨脹。這時候期望在不改變類對象及其類定義的情況下,為對象添加額外功能,這就是裝飾器模式。

2.裝飾器模式定義

①Component抽象構件

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

②ConcreteComponent 具體構件

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

③Decorator裝飾角色

一般是一個抽象類, 實現接口或者抽象方法, 它里面可不一定有抽象的方法, 在它的屬性里必然有一個private變量指向Component抽象構件。

④ConcreteDecorator 具體裝飾角色

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

3.裝飾器模式通用代碼實現

/**
* 抽象構件
*/
public abstract class Component {
public abstract void operator();
}
/**
* 具體構件
*/
public class ConcreteComponent extends Component{
@Override
public void operator() {
System.out.println("doSomething");
}
}
/**
* 抽象裝飾者
*/
public abstract class Decorator extends Component{
private Component component;

public Decorator(Component component){
this.component = component;
}

// 委托給被修飾者執行
@Override
public void operator() {
this.component.operator();
}
}
public class ConcreteDecorator1 extends Decorator{
// 定義被修飾者
public ConcreteDecorator1(Component component){
super(component);
}

// 定義自己的修飾方法
public void method1(){
System.out.println("修飾方法 method1");
}
@Override
public void operator() {
this.method1();
super.operator();
}
}

客戶端測試:

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

打印結果:

4.裝飾器模式優點

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

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

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

5.裝飾器模式應用場景

①、需要擴展一個類的功能, 或給一個類增加附加功能。

②、需要動態地給一個對象增加功能, 這些功能可以再動態地撤銷。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2022-06-09 09:54:45

編譯軟件開發

2022-08-29 23:49:41

Python字符串代碼

2020-02-05 14:05:21

Java技術數組

2021-01-04 09:12:31

集合變量

2024-01-09 16:02:44

Python開源

2013-05-02 10:40:24

xcode

2022-09-07 10:20:05

Python裝飾類

2021-05-28 18:12:51

C++設計

2013-05-29 16:01:21

Android開發Android模擬器移動開發

2013-08-26 13:58:20

2015-10-12 16:52:18

前端機智弄壞電腦

2015-09-08 11:06:46

設計編輯窗體

2013-06-24 10:54:23

IE11瀏覽器

2020-09-22 10:13:54

開源技術 趨勢

2012-04-24 09:22:16

軟件測試

2024-03-28 08:36:57

2020-10-22 10:15:33

優化Windows電腦

2018-06-13 15:05:25

虛擬化地址轉換

2021-06-03 09:18:25

裝飾器模式包裝

2011-03-24 09:34:41

SPRING
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品成人国产乱一区 | 国产精品久久久久久一区二区三区 | 免费黄篇| 亚洲五码在线 | 亚洲激情一区二区三区 | 成人一区二区三区在线观看 | 国产一区二区三区免费观看在线 | 91热在线| 最新中文字幕在线 | 精品国产欧美 | 欧美精品在线播放 | 91视频中文 | 国产一区二区视频免费在线观看 | 欧美黄在线观看 | 亚洲美女在线一区 | 日本精品久久久久久久 | 成人av播放 | 国产精品视频一区二区三区不卡 | 久久久噜噜噜久久中文字幕色伊伊 | 午夜免费 | 成人水多啪啪片 | 国产激情精品 | 蜜桃在线视频 | 99视频| 精品久久久久久亚洲综合网 | 福利片在线观看 | av大片在线观看 | 手机看片在线播放 | 成人免费淫片aa视频免费 | 污免费网站 | 国产乱码精品一区二区三区中文 | 国产男女视频 | 男女视频在线免费观看 | 日本视频在线播放 | 超碰97人人人人人蜜桃 | 草草视频在线播放 | 玖玖国产精品视频 | 狠狠的干狠狠的操 | 国产精品久久久久久久久免费相片 | 久久国产一区二区三区 | 999国产精品视频免费 |