设计模式之桥接模式实例
生活随笔
收集整理的這篇文章主要介紹了
设计模式之桥接模式实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????橋接模式將抽象部分與實現部分分離,使他們都可以獨立變化。如果一個系統有兩個以上相互獨立的抽象變化,就需要使用橋接模式了。為說明橋接模式的使用方法,下面使用一個例子。
????假設設計一個日志系統,這個系統可以記錄多種日志類型,如交易日志,數據庫日志,用戶操作日志等,同時,這個系統還支持多種日志的表現形式。如xml文件,文本文件,數據庫庫數據,E-mail等。
????抽象:日志的種類。
????實現:日志的表現方式。
實現代碼如下:
Log源代碼
public?abstract?class?Log{protected?LogSave?logSave;public?Log(LogSave?logSave){this.logSave=logSave;}public?abstract?void?writeToLog(); }LogSave源代碼
public?abstract?class?LogSave{public?abstract?void?write(); }下面是三個Log的子類
TradLog源代碼
public?class?TradLog?extends?Log{public?TradLog(LogSave?logSave){super(logSave);}@Overridepublic?void?writeToLog(){System.out.println("寫入TradLog數據");this.logSave.write();} }DbLog源代碼
public?class?DbLog?extends?Log{public?DbLog(LogSave?logSave){super(logSave);}@Overridepublic?void?writeToLog(){System.out.println("寫入DbLog數據");this.logSave.write();} }UserLog源代碼
public?class?UserLog?extends?Log{public?UserLog(LogSave?logSave){super(logSave);}@Overridepublic?void?writeToLog(){System.out.println("寫入UserLog數據");this.logSave.write();} }下面是LogSave的三個實現類
XmlImpl源代碼
public?class?XmlImpl?extends?LogSave{@Overridepublic?void?write(){System.out.println("使用xml方式存儲");} }TextImpl源代碼
public?class?TextImpl?extends?LogSave{@Overridepublic?void?write(){System.out.println("使用文本方式存儲");} }EmailImpl源代碼
public?class?EmailImpl?extends?LogSave{@Overridepublic?void?write(){System.out.println("使用發郵件的方式存儲");} }實現不能和抽象發生耦合,而只能由抽象和實現發生耦合。
下面是啟動類展示最終結果:
Client源代碼
public?class?Client{public?static?void?main(String[]?args){Log?log=new?UserLog(new?XmlImpl());log.writeToLog();Log?log2=new?DbLog(new?EmailImpl());log2.writeToLog();} }運行結果如下:
寫入UserLog數據
使用xml方式存儲
寫入DbLog數據
使用發郵件的方式存儲
(end)
轉載于:https://blog.51cto.com/secondscript/1604797
總結
以上是生活随笔為你收集整理的设计模式之桥接模式实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flash 遮罩层全解
- 下一篇: C#如何控制方法的执行时间,超时则强制退