裝飾者模式 跟 介面卡模式

2021-09-02 23:04:20 字數 1522 閱讀 9846

裝飾者模式,為原物件增加功能時使用,裝飾者模式是針對介面實現的,下面是裝飾者模式的結構圖。

針對compoment這個介面進行實現,classa跟decorator都實現compoment這個介面,確保覆寫func()方法,裝飾者本身是不提供功能的,它只是對原有功能的追加,所以裝飾者必須要持有原有的物件,也就是持有compoment的具體實現,這裡classa就是具體實現。

上圖看到decorator有乙個compoment型別的字段,裝飾者本身也實現了compoment,也就是說裝飾者也可以對裝飾者進行修飾,但無論外層包含多少層裝飾者,它都必須擁有乙個具體的實現

當使用者呼叫compoment物件的func()方法時,想在原有功能上新增一些額外功能,就可以使用到裝飾者模式。

遵循"修改封閉,擴充套件開放"原則,不對原有物件進行修改,我們可以實現乙個compoment的裝飾物件,把原物件傳入裝飾器,這樣就可以在不改變原**的功能下擴充套件功能。

下面是**:

public inte***ce compoment 

public class classa implements component

}public class decorator implements component

@override

public void func()

}public class main

}

介面卡模式,把當前物件進行轉換,使它可以適配其他物件,下面是介面卡模式的結構圖。

看了上面這個圖,你會發覺它跟裝飾者模式的結構圖一模一樣,這不就是裝飾者模式的結構嗎?!大部分確實跟裝飾者一模一樣,但是仔細觀察會發現,adapter裡面所持有的具體實現是adaptee,它不存在我們上面的結構圖中,也就是說它是乙個"外來的物件",外來的物件本身並沒有func()這個方法,我們要做的就是通過adapter把它進行裝換,使它也可以使用func()這個方法,當然實際呼叫使用的是adapter來呼叫func()方法。不對原有物件進行修改,但是可以進行擴充套件,正符合"修改封閉,擴充套件開放"原則。

下面是**:

public class adaptee 

}public inte***ce compoment

public class classb implements compoment

}public class adapter implements compoment

@override

public void func()

}public class main

}

裝飾者模式 橋接模式 介面卡模式

在開發過程中,為了擴充套件乙個類的功能我們通常使用繼承乙個子類來實現。但是當擴充套件的功能過多時,則可能出現子類過多,類圖過於膨脹。所以我們使用裝飾者模式來避免這個問題。裝飾者模式提供了一種給乙個類新增職責的方法,它比使用繼承更加靈活,因為它能將職責加到類的指定例項中,它也允許定製乙個類,而無需在繼...

包裝模式(介面卡模式和裝飾者模式)

先看乙個圖 mybatis中的cache 通過對 cache的實現進行了進一步包裝,就可以實現多種多樣的功能,如lru,fifo等快取淘汰策略 點選 synchronizedcache 可以看到,這個是給 方法加上了 synchronized 不同的包裝類,實現了對應特定業務的功能 優點 能提高類的...

基於介面卡模式下的裝飾者模式

有些類被final修飾的類,想繼承進行方法的擴充,但卻不能被繼承。有些類想使用它的方法,但是卻又不想繼承,這兩種情況就是裝飾者的應用場景 本質就是將該類,成員變數的方式實現呼叫方法,並進行補充 實現 inte ce factory 基礎類實現該介面,返回 商品 的字串 final class bas...