介面卡模式(變壓器模式)

2021-08-26 03:41:39 字數 2161 閱讀 3121

為什麼要 用介面卡模式。就是把兩個完全不關聯或者不相同的類糾合一起時才使用這個模式。

這個模式涉及到角色:

源角色:需要適配的角色。

目標角色:期待使用的介面。

介面卡角色:把源角色轉化成目標角色。這個是模式的核心。著重轉化功能。

介面卡模式分兩種情況:

類的介面卡模式和物件的介面卡模式 。

首先來講講類的介面卡模式:

如下例:

指方為圓的故事。

//方形介面

public inte***ce square

為了能使圓形介面能使用畫方形功能。則介面卡角色產生。介面卡角色作用就是能夠提供目標角色不具有的源角色功能。

介面如下

public class circularadator implements circular,square{

public void drawsquare(){

system.out.println("我是方形介面的功能 我畫方形");

public void drawcircular(){

system.out.println("我是圓形介面的功能。我畫圓形");

//方形和圓形都有此功能。

public boolean isgraphical(){

return true;

類適配模式。比較簡單。。而且只能適合單一的類。子類和多個類都都無法重用這個介面卡。如果要適配分別要針對每個子類進行適配。這樣維類就會越來越臃腫。而且也不可取。

物件介面卡。主要使用聚合/組合原則進行的適配。通過對上面的介面改造如下。

//被適配的介面 方形介面 擁有畫方形的能力

public  inte***ce square{

//畫方形圖畫的能力

public void drawsquare();

//是否是圖形 指的是形狀

public boolean isgraphical();

//圓形介面,目標介面 我們需要的介面

public inte***ce circulare{

//擁有畫圓形的能力

public void drawcirculare();

//同樣是圖形

public void isgraphical();

//具體被適配的介面的實現類。。這裡也可以直接適配

public class squareadaptee implements square{

//具有畫方形的能力

public void drawsquare(){

system.out.println("我是方形圖形噢。。")

public boolean isgraphical(){

return true;

//圓形介面卡類,是我們的目標類,實現圓形介面,本身擁有畫圓形的能力之外。同時需要提供方形的能力

public class circulareadaptor implements circulare{

//組合方形介面,適配

private square squareadaptee;

//構造子

public circulareadaptor(square squareadaptee){

this.squareadaptee =squareadaptee;

public void drawcirculare(){

system.out.println("我具有畫圓形的能力噢");

//是圖形 

public boolean isgraphical(){

return true;

//委託方形去畫。圓形不具有畫方形的功能

public void drawsquare(){

squareadaptee.drawsquare();

針對物件介面卡模式。因為是使用了組合和聚合原則。源介面(被適配的類)的子類都適用這個介面卡類,不需要增加具體子類的介面卡類。從而減輕了類的維護成本。

預設介面卡類。

如果源和目標介面為同乙個類。又由於我們不需要源類所有方法。我們提供源類的平庸實現。後續子類繼承時。我們有選擇我們需要的功能方法。

例省略。

應用場景:

1,我們需要的目標的角色功能。但是源口介面沒沒有的

2,當源介面無法修改時。我們需要適配角色來達到我們需要的介面的目的。

設計模式之介面卡(變壓器)模式

介面卡 變壓器 模式 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面原因不匹配而無法一起工作的兩個類能夠一起工作。適配類可以根據引數返還乙個合適的例項給客戶端。中國市電220v,如果買個國產筆記本去國外,國外電壓110v如何使用呢?幸好有了筆記本電源介面卡幫忙 created by ...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...

介面卡模式 日誌介面卡

在寫 策略模式 的時候,筆者就用 日誌 舉了例子,這篇文章還是要以日誌為例。日誌的重要性筆者這裡不再多言了,大家在系統開發中記錄日誌的時候,有沒有考慮過這樣乙個問題 萬一使用的日誌框架要更換呢?一旦更換你需要怎麼做?修改所有的 替換logger類嗎?如果這麼做的話,不管是對系統,還是對開發者來說,都...