你好banq,請教模式
我的理解對不對呀?謝謝回答?
Decorator(油漆工)模式:實質就是給一個物件動態新增功能,具體是有一個類A,A假設只有一個功能或沒有我所想要的功能,但A類不能修改,怎麼辦?我就可以寫一個Decorator油漆工類,讓這個類幫我給A類新增功能,編譯期間A根本不知道要給他新增什麼功能,只有在執行期間才知道.因為有不同的Decorator類,所以,給A新增功能可以看成是動態的?相當於一個只有A功能的類讓別一個B類包裝,則B類就除了有A功能,還有B中新新增的功能.
>Bridge模式:就是將抽象和行為分開,分別都有自己的介面和實現,這樣,抽象可以任意新增,行為也可以任意新增,而互相不影響各自,比如記日誌,日誌是介面,有不同的實現:TXT日誌,DB日誌,行為是怎麼記法?在.NET和JAVA平臺下有不同的記法,如果再新增一個記法:Other,則不需要修改任何類,這個模式主要是增強程式的可擴充套件性,降代類之間的耦合
>
>/**
> * 抽象介面
> */
>abstract class Log {
> protected LogImpl logImpl;// 行為
>
> public void setImpl(LogImpl logImpl) {
> this.logImpl = logImpl;
> }
>
> public abstract void write();
>}
>
>/**
> * 行為介面
> *
> */
>abstract class LogImpl {
> public abstract void writeLog();
>}
>
>/**
> * 對抽象的實現
> *
> */
>class TextLog extends Log {
>
> public void write() {
> System.out.print("write text log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 對抽象的實現
> *
> */
>class DBLog extends Log {
> public void write() {
> System.out.print("write db log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 對抽象的實現
> *
> */
>class OtherLog extends Log {
> public void write() {
> System.out.print("write other log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 對行為的實現
> *
> */
>class JavaLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println("java");
> }
>}
>
>/**
> * 對行為的實現
> *
> */
>class DotNetLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println(".NET");
> }
>}
>
>/**
> * 對行為的實現
> *
> */
>class OtherLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println("other");
> }
>}
>
>public class TestBridgePattern {
>
> /**
> * @param args
> */
> public static void main(String[] args) {
> // TODO Auto-generated method stub
> // .NET平臺下的Database log
> Log dblog = new DBLog();
> dblog.setImpl(new DotNetLogImpl());
> dblog.write();
> // Java平臺下的TEXT log
> Log txtlog = new TextLog();
> txtlog.setImpl(new JavaLogImpl());
> txtlog.write();
>
> // 其它平臺下的其它行為
> Log otherLog = new OtherLog();
> otherLog.setImpl(new OtherLogImpl());
> otherLog.write();
> }
>}
Decorator(油漆工)模式:實質就是給一個物件動態新增功能,具體是有一個類A,A假設只有一個功能或沒有我所想要的功能,但A類不能修改,怎麼辦?我就可以寫一個Decorator油漆工類,讓這個類幫我給A類新增功能,編譯期間A根本不知道要給他新增什麼功能,只有在執行期間才知道.因為有不同的Decorator類,所以,給A新增功能可以看成是動態的?相當於一個只有A功能的類讓別一個B類包裝,則B類就除了有A功能,還有B中新新增的功能.
>Bridge模式:就是將抽象和行為分開,分別都有自己的介面和實現,這樣,抽象可以任意新增,行為也可以任意新增,而互相不影響各自,比如記日誌,日誌是介面,有不同的實現:TXT日誌,DB日誌,行為是怎麼記法?在.NET和JAVA平臺下有不同的記法,如果再新增一個記法:Other,則不需要修改任何類,這個模式主要是增強程式的可擴充套件性,降代類之間的耦合
>
>/**
> * 抽象介面
> */
>abstract class Log {
> protected LogImpl logImpl;// 行為
>
> public void setImpl(LogImpl logImpl) {
> this.logImpl = logImpl;
> }
>
> public abstract void write();
>}
>
>/**
> * 行為介面
> *
> */
>abstract class LogImpl {
> public abstract void writeLog();
>}
>
>/**
> * 對抽象的實現
> *
> */
>class TextLog extends Log {
>
> public void write() {
> System.out.print("write text log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 對抽象的實現
> *
> */
>class DBLog extends Log {
> public void write() {
> System.out.print("write db log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 對抽象的實現
> *
> */
>class OtherLog extends Log {
> public void write() {
> System.out.print("write other log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 對行為的實現
> *
> */
>class JavaLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println("java");
> }
>}
>
>/**
> * 對行為的實現
> *
> */
>class DotNetLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println(".NET");
> }
>}
>
>/**
> * 對行為的實現
> *
> */
>class OtherLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println("other");
> }
>}
>
>public class TestBridgePattern {
>
> /**
> * @param args
> */
> public static void main(String[] args) {
> // TODO Auto-generated method stub
> // .NET平臺下的Database log
> Log dblog = new DBLog();
> dblog.setImpl(new DotNetLogImpl());
> dblog.write();
> // Java平臺下的TEXT log
> Log txtlog = new TextLog();
> txtlog.setImpl(new JavaLogImpl());
> txtlog.write();
>
> // 其它平臺下的其它行為
> Log otherLog = new OtherLog();
> otherLog.setImpl(new OtherLogImpl());
> otherLog.write();
> }
>}
相關文章
- banq 你好,請教模式模式
- 你好,BANQ,請教模式模式
- 你好BANQ,請教模式使用模式
- banq 你好,請教Observer模式Server模式
- 你好BANQ,請教Bridge模式模式
- banq 你好,再請教幾個模式模式
- 你好banq,關於JVM請教一下JVM
- EJBCommand模式向banq請教模式
- 你好,Banq和大家,請教JSF的邏輯標籤JS
- 請教banq大哥SOAP和HTTPHTTP
- 請教Banq工廠模式中的一些問題模式
- 請教banq 抽象工廠模式怎樣和工廠方法模式配合使用抽象模式
- banq,Jdon Framework的問題請教Framework
- 請教banq DDD學習問題!
- Banq,請教一下關於非同步事件監聽模式非同步事件模式
- 請教banq,關於java和.net平臺Java
- 請教banq關於domain object的問題AIObject
- 請教BANQ,關於Timer開發
- 請教banq大哥,領域模型的設計模型
- 請教prototype模式!模式
- 請教banq老師怎樣學習DDD領域建模和設計模式設計模式
- 向banq老師請教:ddd中的值物件物件
- 請教Banq和各位道友連線失效問題
- 請教Banq一個Ruby架構的問題架構
- 請教BANQ關於J2EE開發
- 請教BanQ,讀原始碼先讀那個好?原始碼
- j2ee1.4 new feature請教banq
- benq,你好!框架中有關 getDataSource()問題請教一下ENQ框架
- 請教banq老師一個repository的問題
- Banq,請教如何動態實現標準java bean?JavaBean
- 請教banq問題,關於hibernate的jdbc的JDBC
- 請教banq大哥:資料庫設計的問題!!!資料庫
- 請教banq大哥j2ee叢集開發
- 向banq老師請教一組架構問題架構
- 請教介面卡模式模式
- 請教banq disruptor中ringBuffer能不能做排序排序
- 請教banq以及各位熱心的網友,關於JdbcUtilJDBC
- 請教:單例模式的缺陷單例模式