日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

23种经典设计模式的java实现_3_桥接模式

發布時間:2025/3/20 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种经典设计模式的java实现_3_桥接模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
橋接模式的適用: 你不希望在抽象和它的實現部分之間有一個固定的綁定關系。例如:程序的實現部分在運行時需要被選擇或者切換。 類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充。這時Bridge模式使你可以對不同的抽象接口和實現部分進行組合,并分別對它們進行擴充。 對一個抽象實現的修改需要對客戶不產生影響,即客戶的代碼不必重新編譯。 有許多類要生成。這種情況下你必須將一個對象分解成兩個部分。這種類層次結構為“嵌套的普化”。 你想在多個對象間共享實現(可能使用引用計數),但同時要求客戶并不知道這一點。 示例說明: 接口IText定義了字體的最終展現,但其的具體實現TextImpLinux和TextImpMac并不用作對外使用(即向客戶暴露)。 那么,我們使用抽象類AbstractText對IText的具體實現進行“橋接”,即在這兩個真實的實現和最終對外使用的字體類TextBold和TextItalic之間建造了一座橋梁,這座橋梁是通過TextBold和TextItalic繼承抽象類AbstractText實現的。 最終,結果就是,字體具有了新的特性Bold和Italic但又不失自己的基本屬性Linux和Mac。 這就是我們想要的。 字體接口及其兩個基本實現——具有Linux風格或Mac風格的字體: package com.alex.designpattern.bridge; /** *//**
?* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
?* @serialData 2007
?*/
public interface IText ...{
??? public void DrawTextImp();
} package com.alex.designpattern.bridge; /** *//**
?* The ConcreteImplementor
?*/
public class TextImpLinux implements IText ...{
??? public void DrawTextImp() ...{
??????? System.out.println("The text has a Linux style.");
??? }
} package com.alex.designpattern.bridge; /** *//**
?* The ConcreteImplementor
?*/
public class TextImpMac implements IText ...{
??? public void DrawTextImp() ...{
??????? System.out.println("The text has a Mac style.");
??? }
}
?這個抽象類可以看作是一個橋梁,它被用來“橋接”字體的基本實現與字體的附加特性,使字體的屬性得到無綁定的擴充: package com.alex.designpattern.bridge; /** *//**
?* The Abstract of Text<br>
?* Set the Text's System Style
?* <p>
?* This abstract class is a bridge,<br>
?* it can bridge "System Style" to real implemention "Text Style" of IText.
?*
?* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
?* @serialData 2007
?*/
public abstract class AbstractText ...{
??? public abstract void DrawText(String text); protected IText GetTextImp(String type) ...{
??????? if (type.equals("Mac")) ...{
??????????? return new TextImpMac();
??????? } else if (type.equals("Linux")) ...{
??????????? return new TextImpLinux();
??????? } else ...{
??????????? return new TextImpMac();
??????? }
??? }
}
那么,以下就是字體的附加特性——粗體和斜體,它們通過實現抽象類AbstractText來與基本屬性的實現結合: package com.alex.designpattern.bridge; /** *//**
?* The RefinedAbstraction
?*
?* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
?* @serialData 2007
?*/
public class TextBold extends AbstractText ...{
??? private IText imp; public TextBold(String type) ...{
??????? imp = GetTextImp(type);
??? } public void DrawText(String text) ...{
??????? System.out.println(text);
??????? System.out.println("The text is bold text.");
??????? imp.DrawTextImp();
??? }
} package com.alex.designpattern.bridge; /** *//**
?* The RefinedAbstraction
?*
?* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
?* @serialData 2007
?*/
public class TextItalic extends AbstractText ...{
??? private IText imp; public TextItalic(String type) ...{
??????? imp = GetTextImp(type);
??? } public void DrawText(String text) ...{
??????? System.out.println(text);
??????? System.out.println("The text is italic text.");
??????? imp.DrawTextImp();
??? }
}
最后,當然是測試啟動類啦,通過可以測試我們對這個模式的實現: package com.alex.designpattern.bridge; /** *//**
?* 橋接模式
?* <p>
?* 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。
?*
?* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
?* @serialData 2007
?*/
public class Test ...{ public static void main(String[] args) ...{
??????? AbstractText myText = new TextBold("Mac");
??????? myText.DrawText("=== A test String ==="); System.out.println("------------------------------------------"); myText = new TextBold("Linux");
??????? myText.DrawText("=== A test String ==="); System.out.println("------------------------------------------"); myText = new TextItalic("Mac");
??????? myText.DrawText("=== A test String ==="); System.out.println("------------------------------------------"); myText = new TextItalic("Linux");
??????? myText.DrawText("=== A test String ===");
??? }
}
你還等什么呢?復制下來運行它試試看吧——如果你還對“橋接”模式不了解的話。 ?

轉載于:https://blog.51cto.com/huqicto/280902

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的23种经典设计模式的java实现_3_桥接模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。