1. 程式人生 > >軟體架構模式基本概念及三者區別

軟體架構模式基本概念及三者區別

上次無意種讀到這篇文章,個人覺得說得比較全面,就此記錄下。原文地址:http://zhidao.baidu.com/link?url=ehOFeyNExgYkFdGD9SYAWGsWNBpeWyzMW1bUoqqAq_-VfrQsBU9CyBxys0zAx715sdBnh98bRzbX9mCYGR5jgq 

在做軟體架構設計時,根據不同的抽象層次可分為三種不同層次的模式:架構模式(Architectural Pattern)、設計模式(Design Pattern)、程式碼模式(Coding Pattern)。

        架構模式是一個系統的高層次策略,涉及到大尺度的元件以及整體性質和力學。架構模式的好壞可以影響到總體佈局和框架性結構。

        設計模式是中等尺度的結構策略。這些中等尺度的結構實現了一些大尺度元件的行為和它們之間的關係。模式的好壞不會影響到系統的總體佈局和總體框架。設計模式定義出子系統或元件的微觀結構。

        程式碼模式(或成例)是特定的範例和與特定語言有關的程式設計技巧。程式碼模式的好壞會影響到一箇中等尺度元件的內部、外部的結構或行為的底層細節,但不會影響到一個部件或子系統的中等尺度的結構,更不會影響到系統的總體佈局和大尺度框架。

架構模式(Architectural Pattern)

一個架構模式描述軟體系統裡的基本的結構組織或綱要。架構模式提供一些事先定義好的子系統,指定它們的責任,並給出把它們組織在一起的法則和指南。稱之為系統模式。

•MVC模式,一個架構模式常常可以分解成很多個設計模式的聯合使用。MVC模式常常包括調停者(Mediator)模式、策略(Strategy)模式、合成(Composite)模式、觀察者(Observer)模式等。

•Layers(分層)模式,有時也稱Tiers模式

•Blackboard(黑板)模式

•Broker(中介)模式

•Distributed Process(分散過程)模式

•Microkernel(微核)模式

架構模式常常劃分成如下的幾種:

一、 模組結構(From Mud to Structure)型。幫助架構師將系統合理劃分,避免形成一個物件的海洋。包括Layers(分層)模式、Blackboard(黑板)模式、Pipes/Filters(管道/過濾器)模式等。

二、分散系統(Distributed Systems)型。為分散式系統提供完整的架構設計,包括像Broker(中介)模式等。

三、人機互動(Interactive Systems)型,支援包含有人機互動介面的系統的架構設計,例子包括MVC(Model-View-Controller)模式、PAC(Presentation-Abstraction-Control)模式等。

四、Adaptable Systems型,支援應用系統適應技術的變化、軟體功能需求的變化。如Reflection(反射)模式、Microkernel(微核)模式等。

設計模式(Design Pattern)

一個設計模式提供一種提煉子系統或軟體系統中的元件的,或者它們之間的關係的綱要設計。設計模式描述普遍存在的在相互通訊的元件中重複出現的結構,這種結構解決在一定的背景中的具有一般性的設計問題。

設計模式常常劃分成不同的種類,常見的種類有:

建立型設計模式,如工廠方法(Factory Method)模式、抽象工廠(Abstract Factory)模式、原型(Prototype)模式、單例(Singleton)模式,建造(Builder)模式等

結構型設計模式,如合成(Composite)模式、裝飾(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、門面(Facade)模式、橋樑(Bridge)模式等

行為型模式,如模版方法(Template Method)模式、觀察者(Observer)模式、迭代子(Iterator)模式、責任鏈(Chain of Responsibility)模式、備忘錄(Memento)模式、命令(Command)模式、狀態(State)模式、訪問者(Visitor)模式等等。

以上是三種經典型別,實際上還有很多其他的型別,比如Fundamental型、Partition型,Relation型等等。設計模式在特定的程式語言中實現的時候,常常會用到程式碼模式。比如單例(Singleton)模式的實現常常涉及到雙檢鎖(Double-Check Locking)模式等。

程式碼模式(Coding Pattern)

程式碼模式(或成例)是較低層次的模式,並與程式語言密切相關。程式碼模式描述怎樣利用一個特定的程式語言的特點來實現一個元件的某些特定的方面或關係。

較為著名的程式碼模式的例子包括雙檢鎖(Double-Check Locking)模式等