結構模式:
介面卡模式:用於匹配不協調的介面的類。
裝飾模式:動態地向乙個類中的乙個存在的物件新增或重寫新的行為。
門面模式:為一堆龐大的**提供乙個簡化的介面。
行為模式:
策略模式:舉個例子,動物的叫聲,貓和狗和其他動物的叫聲都不一樣,讓系統根據物件的差別來正確地發出叫聲就是策略模式。
模板模式:一些共性的行為就放在一起,不同的行為就在各個子類中實現。
將某個類/介面轉換為client期望的其他形式。
例子:client要創造乙個長方形,已經存在的乙個創造的長方形的方法要求的引數列表是長方形的乙個頂點和長方形的長和寬,但是client想要用長方形的對角的兩個頂點的座標創造乙個長方形。這裡就用到了介面卡。
inte***ce shape
//完成介面,這個類即是介面卡。
class rectangle implements shape
}//已經存在的創造長方形的方法。
class legacyrectangle
}
用每個子類實現不同的特性,通過繼承和委託共同實現。
例子:
//以棧的擴充為例,這裡想要為棧增加乙個undo功能,撤銷push或pop操作。
inte***ce stack
//創造乙個普通的類來完成stack介面。
public class arraystack implements stack
public void push(item e)
public void pop()
}//來完成乙個用於裝飾arraystack類的介面。
public class stackdecorator implements stack
public void push(item e)
public void pop()
}//來完成undostack。
public class undostack extends stackdecorator implements stack
客戶端需要乙個簡化的介面來訪問複雜系統內的功能。提供乙個統一的介面來取代一系列小介面呼叫,對複雜系統做乙個封裝。
例子:
假設if1和if2是兩個使用者能呼叫的介面,裡面都有f和g方法。
public class if1
public void g() {}
}public class if2
public void g() {}
}//這裡建立乙個外觀類來統一這兩個介面,採用switch方法。
public generate
} }}
有多種不同的演算法來實現同乙個任務,但需要client動態切換演算法。為不同的實現方法構造抽象介面,利用delegation,執行時動態使用client指定的演算法。(利用動態繫結)
例子:這裡以支付的方式為例。
//首先創造乙個抽象介面支付。
inte***ce pay
//接著創造兩種支付方式。
public class pay1
}public class pay2
//這裡利用動態繫結機制來動態地執行client想要執行的支付方式。
做事情的步驟一樣,但具體的方法不同。共性的步驟在抽象類中實現,差異化步驟在子類中實現。
注:使用繼承和重寫來實現模板。
設計模式 結構模式 外觀模式
外觀模式 fasade pattern 隱藏系統的複雜性 將一系列複雜的業務交給乙個外觀類來供使用者呼叫,使用者不用對具體的業務實現關注太多。最好理解的是電腦開關機的案例 computer的power on 或者power off是cpu,memory和disk的開關的總體結果,但是使用者無需知道這...
架構模式和設計模式
八種常用架構模式 層管黑代 模表微映 從混沌到結構 層有助於構建這樣的應用 它能被分解成子任務組,其中每個子任務組處於乙個特定的抽象層次上。管道 過濾器 為處理資料流的系統提供了一種結構。每個處理步驟封裝在乙個過濾器元件中。資料通過相鄰過濾器之間的管道傳輸。重組過濾器可以建立相關系統簇。黑板對於無確...
設計模式大類 結構模式 上
大概有7中結構模式,分為上下兩篇。一 adapter 介面卡 描述 將兩個不相容的類結合一起使用,一般需要用到其中某個類的若干方法 好處 在兩個類直接建立乙個混合介面,而不必修改類裡面的其他 例子 假設我們要打樁,有兩種類 方形樁 圓形樁.public class squarepeg public ...