你好banq,請教模式

xysniper發表於2006-10-17
我的理解對不對呀?謝謝回答?
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();
> }
>}

相關文章