日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何動態(tài)地給一個類增加功能?

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

創(chuàng)新互聯(lián)建站專注于讓胡路企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城建設(shè)。讓胡路網(wǎng)站建設(shè)公司,為讓胡路等地區(qū)提供建站服務(wù)。全流程定制制作,專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

1.什么是裝飾器模式?

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

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

說人話:一般的,我們?yōu)榱藬U(kuò)展一個類經(jīng)常使用繼承方式實(shí)現(xiàn),隨著擴(kuò)展功能的增多,子類會很膨脹。這時候期望在不改變類對象及其類定義的情況下,為對象添加額外功能,這就是裝飾器模式。

2.裝飾器模式定義

①Component抽象構(gòu)件

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

②ConcreteComponent 具體構(gòu)件

ConcreteComponent是最核心、 最原始、 最基本的接口或抽象類的實(shí)現(xiàn), 你要裝飾的就是它。

③Decorator裝飾角色

一般是一個抽象類, 實(shí)現(xiàn)接口或者抽象方法, 它里面可不一定有抽象的方法, 在它的屬性里必然有一個private變量指向Component抽象構(gòu)件。

④ConcreteDecorator 具體裝飾角色

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

3.裝飾器模式通用代碼實(shí)現(xiàn)

/**
* 抽象構(gòu)件
*/
public abstract class Component {
public abstract void operator();
}
/**
* 具體構(gòu)件
*/
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;
}

// 委托給被修飾者執(zhí)行
@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);
// 修飾后運(yùn)行
component.operator();
}
}

打印結(jié)果:

4.裝飾器模式優(yōu)點(diǎn)

①裝飾模式可以動態(tài)地擴(kuò)展一個實(shí)現(xiàn)類的功能。

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

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

5.裝飾器模式應(yīng)用場景

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

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


當(dāng)前題目:如何動態(tài)地給一個類增加功能?
網(wǎng)站URL:http://www.5511xx.com/article/ccopdej.html