設計模式系列漫談之十一 橋接模式

2022-02-28 07:35:46 字數 1680 閱讀 9892

故事

在小雪的追求者中,有些是身邊熟悉的朋友,有些確未曾謀面的朋友。在這幾個月裡,小雪一直與他們保持著正常的通訊聯絡。可是,其中有一位男孩給她留下深刻的印象。他是乙個幽默,機智,活潑,風趣的人。日子一天天過去了,小雪對他產生一種從未有過的好奇,不止一次地在腦海裡勾劃他的音容笑貌。

終於有一天,小雪對他說能不能用手機發張照發給我。但是,小雪的手機只能接收來自不同手機的簡訊。是否有辦法使小雪的手機既能接收不同手機傳送的簡訊,也能接收不同手機傳送的**呢?

橋接模式(bridge)的解決方案

gof指出,橋接模式將抽象化(abstraction)與實現化(implementation)脫耦,使得二者可以獨立地變化。換言之,使兩個維度的變化分離。

抽象化:存在於多個實體中的共同的概念性聯絡,就是抽象化。如不同的手機品牌(nokia、motorola)。

實現化:抽象化給出的具體實現,就是實現化。如傳送的資訊型別(普通簡訊、彩信)

橋接模式定義的角色:

抽象化角色(mobile):抽象化介面定義

具體抽象化角色(nokia、motorala):抽象化具體實現

實現化角色(type):實現化介面定義

具體實現化角色(messagetype、picturetype):實現化角色介面的具體實現

抽象化角色如下:

namespace

xiaoxue

public

abstract

void

sendmessage(

object

msg);

public

abstract

void

sendpictue(

object

pic);}}

具體抽象化角色如下:

namespace

xiaoxue

public

override

void

sendmessage(

object

msg)

public

override

void

sendmessage(

object

msg)

}public

class

motorola : mobile

public

override

void

sendmessage(

object

msg)

public

override

void

sendmessage(

object

msg)}}

實現化角色如下:

namespace

xiaoxue

}具體實現化角色如下:

namespace

xiaoxue

}public

class

picturetype:type}}

客戶端呼叫如下:

moblile mobile

=new

nokia(

newmessagetype())

if(mobile.gettype()=="

message")

設計模式之橋接模式

public class test 兩個維度 乙個是具體產品,如狗 豬 乙個是抽象產品,如溫順的動物 冷酷的動物 排列組合 如溫順的狗 冷酷的豬等 abstract class animal 該橋接類的引入是關鍵 abstract class animalbridge extends animal ...

設計模式之 橋接模式

今天來學習橋接模式,在我們日常生活中,有很多的事物是可以 多維度 的變化的,比如我們去吃麵條,有雞絲面和牛肉麵兩種,每一種面又分為辣味的和不辣的,而且每種面可能會分為大碗小碗的。很多事物能夠變化的維度不止一種,甚至數十種,那麼我們在 上怎麼應對這些變化呢?每乙個都單獨弄乙個類顯然不是什麼好辦法。那麼...

設計模式之橋接模式

在軟體系統中,某些型別由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種 多維度的變化 如何利用物件導向的技術來使得該型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度?這就要使用橋接模式。現在有咖啡,按大小分可以分為中杯和大杯,按型別可以分為拿鐵和摩卡,所以現在總共有四中咖啡,中...