1. 程式人生 > >OO與設計模式的原則、目標

OO與設計模式的原則、目標

前兩天,和一朋友聊到OO設計原則時,對設計模式有了更深的瞭解,在這裡總結一下,與大家分享。
OO(Object–Oriented )面向物件 
  OO方法(Object-Oriented Method,面向物件方法,面向物件的方法)是一種把面向物件的思想應用於軟體開發過程中,指導開發活動的系統方法,簡稱OO (Object-Oriented)方法,是建立在“物件”概念基礎上的方法學。物件是由資料和容許的操作組成的封裝體,與客觀實體有直接對應關係,一個物件類定義了具有相似性質的一組物件。而每繼承性是對具有層次關係的類的屬性和操作進行共享的一種方式。所謂面向物件就是基於物件概念,以物件為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統。

OO的設計目標:

  • 可擴充套件性:有了新的需求,新的效能可以容易新增到系統中,不影響現有的效能,也不會帶來新的缺陷。
  • 可修改性:系統一部分的程式碼要修改時不會破壞系統的現有結構,也不會影響到其它的部分。
  • 可替換性:可以將系統中的某些程式碼替換為相同介面的其它類,不會影響到系統。

設計模式的設計原則:

  • “開放--封閉”原則:
    設計模式的核心原則。軟體實體(類,模組,函式)對於擴充套件是開放的,對於修改是關閉的 。實現開閉原則的關鍵就是抽象化。“開放--封閉”原則中,不允許修改的是抽象的類或者介面。允許擴充套件的是具體的實現類,抽象類和介面在“開-閉”原則中扮演著極其重要的角色 。
  • 封裝變化點原則:
    這是對"開-閉"原則最好的實現..不要把你的可變因素放在多個類中,或者散落在程式的各個角落..你應該將可變的因素,封套起來..並且切忌不要把所用的可變因素封套在一起..最好的解決辦法是,分塊封套你的可變因素!!避免超大類,超長類,超長方法的出現!!給你的程式增加藝術氣息,將程式藝術化是我們的目標!!
  • 里氏代換原則:
    任何基類可以出現的地方,子類也可以出現 。
  • 依賴倒轉原則:
    要依賴抽象,而不要依賴具體的實現。
    抽象不應當依賴於細節,細節應當依賴於抽象;要針對介面程式設計,不要針對實現程式設計
  • 單一職責原則:
    一個類應該只有一個引起它變化的原因。
  • 介面隔離法則 :
    為了做到儘可能小的耦合性,我們需要使用介面來規範類,用介面來約束類。要達到迪米特法則的要求,最好就是實現介面隔離法則。
    使用多個專門的介面比使用單一的總介面要好.從一個客戶類的角度來講:一個類對另外一個類的依賴性應當是建立在最小的介面上的。一個介面應當簡單地代表一個角色,而不是多個角色。多個演員可以同時演一個角色,就象孫悟空的孩兒一樣。
  • 合成/聚合原則:
    要儘量使用合成/聚合原則,而不是繼承關係達到軟體複用的目的。聚合用來表示“擁有”或整體與部分的關係,而合成則用來表示一種強得多的“擁有”關係。在一個合成關係裡,部分和整體的生命週期是一樣的。合成就象所說的“合成品”,拆開就壞。
  • 迪米特法則:
    系統中的類,儘量不要與其他類互相作用,減少類之間的耦合度。
    一個物件應當對其它物件有儘可能少的瞭解,兩個類不必直接通訊,可以通過第三者(抽象)轉發這個呼叫,這個抽象的第三者可以是門面,可以是調停者,甚至是一個抽象類或介面,模組要獨立,獨立被封裝,他們只靠public的API來通訊,只要有可能,一個類應當設計成不變類,其屬性都應該是私有的,如果一個類有太多的public訪問許可權的方法,可以考慮使用多個類把一個類的私有方法和公有方法分開。

聚合(Aggregation):

   這是一種鬆散的物件間的關係.舉個例子:計算機和他的外圍裝置就是一例.

  用來表示擁有關係或者整體與部分的關係。

組合(Composition):

這是一種非常強的物件間的關係,舉個例子,樹和它的樹葉之間的關係.

在一個合成裡,部分與整體的生命週期都是一樣的。一個合成的新物件完全擁有對其組成

部分的支配權。包括他們的建立和毀滅。

最後總結一下:

聚合:

  •  聚合有時能夠不依賴部分而存在,有時又不能
  • 部分可以獨立於聚合而存在
  • 如果有一部分遺失,聚合會給人一種不完全的感覺
  • 部分的所有權可以由幾個聚合來共享,比如印表機

合成:

  • 部分某一時刻只能屬於某一個組成
  • 組成唯一的負責處理它的所有部分--這就意味著負責他們的建立與銷燬
  • 倘若對於部分的職責由其他物件來承擔的話,組成也就可以放鬆這些職責。
  • 如果組成銷燬的話,它必須銷燬所有的部分,或者把負責他們的權利轉移給其他物件。

設計模式所解決的問題:
通過顯示指定類建立物件:
     相關的設計模式:簡單工廠、工廠方法、抽象工廠。
緊耦合:
    相關的設計模式:抽象工廠、命令模式、外觀模式、中介者模式、觀察者模式、職責鏈模式等。
對物件表示或實現的依賴:
     相關的設計模式:抽象工廠、橋接模式、備忘錄模式、代理模式等。
通過生成子類擴充套件功能:
     相關的設計模式:橋接模式、職責鏈模式、組合模式、裝飾模式、觀察者模式、策略模式等。
有能方便地修改類:
     相關的設計模式:介面卡模式、裝飾模式、訪問者模式等。
對演算法的依賴:
     相關設計模式: 生成器模式、迭代模式、策略模式、模板方法模式、訪問者模式等。
對軟硬體環境的依賴:
     相關設計模式:抽象工廠模式、橋接模式等。


相關推薦

OO設計模式原則目標

前兩天,和一朋友聊到OO設計原則時,對設計模式有了更深的瞭解,在這裡總結一下,與大家分享。OO(Object–Oriented )面向物件   OO方法(Object-Oriented Method,面向物件方法,面向物件的方法)是一種把面向物件的思想應用於軟體開發過程中,

Java學習筆記--設計原則設計模式類載入反射的介紹

設計原則、設計模式 面向物件思想設計原則 單一職責原則:每個類應該只有一個職責,對外只能提供一種功能。其實就是”高內聚,低耦合”。 開閉原則:對擴充套件開放,對修改關閉。即在設計一個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。 里氏替換原則

4.4 類的方法(Methods)- 摘自 《SAP ABAP面向對象程序設計原則模式及實踐》

讀寫 圖片 solid ESS ng- tin 結果 必須 factor 《SAP ABAP面向對象程序設計:原則、模式及實踐》 https://book.douban.com/subject/30317853/ http://www.duokan.com/s

設計模式學習——設計原則設計模式

設計原則和模式 一、設計原則 1、單一職責原則:就一個類而言,應該僅有一個引起它變化的原因。換句話說,一個類的功能要單一,只做與它有關的事。(android的四大元件) 2、開放封閉原則:一個軟體實體應該對外擴充套件開放,對修改封閉。對擴充套件開放意味著有新的需求或變化時,可以對現有程式

6.3 SAP ABAP 開放封閉原則(OCP)- 摘自 《SAP ABAP面向對象程序設計原則模式及實踐》

selection douban 類工廠 ext 系統管理 oop 不可 行數 github 6.3 開放封閉原則(OCP) 開閉原則(Open-Closed Principle, OCP)指的是,一個類或者模塊,如果在業務修改或者功能需要擴展時,應盡可能保證只通過

設計原則設計模式

什麼是設計原則? 1. 單一職責原則(SRP)  定義:就一個類而言,應該僅有一個引起它變化的原因。  從這句定義我們很難理解它的含義,通俗講就是我們不要讓一個類承擔過多的職責。如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完

深入PHP面向物件模式實踐——模式原則(1)

組合 模式的啟示 通過以靈活的方式來組合物件,元件能在執行時被定義。《設計模式》將此提煉出一個原則:組合優於繼承。 組合與繼承 繼承是應對變化的環境及上下文設計的有效方式,然而它會限制靈活性,尤其是當類承擔了過多的責任的時候。 問題 以下圖

23-Python設計模式--設計原則

一 六大設計原則 在法理學中,法律規則與法律原則都是法律規範的重要構成。但二者也會有些不同:法律規則是指採取一定的結構形式具體規定人們的法律權利、法律義務以及相應的法律後果的行為規範,內容比較明確,比如,交通法規中規定,禁止闖紅燈;法律原則是指在一定法律體系中作為法律規則的指導思想,基本或本原的、綜合的、穩

MVC學習系列-WebFormasp.net MVC兩種設計模式區別MVC設計模式基礎瞭解

ASP.NET 是一個開發框架,用於通過 HTML、CSS、JavaScript 以及伺服器指令碼來構建網頁和網站。ASP.NET 支援三種開發模式:Web Pages、MVC (Model View Controller) 以及 WebForm。下面首先區別比較一下Web

開篇—-面向物件的設計原則設計模式

        設計模式是前人總結的解決某特定場景的設計問題的方法,就像武學中的一招半式,說白一點就是解決某些問題的慣用法,人們也都把關於“重複發生的問題的描述和解決辦法”統稱為模式。         “模式”這個詞是不侷限於軟體開發行業的,它幾乎無處不在,它其實就是一種經

JAVA設計模式 1 設計模式介紹單例模式的理解使用

資料結構我們已經學了一部分了。是該瞭解瞭解設計模式了。習慣了`CRUD`的你,也該瞭解瞭解這一門神器、我為啥要說是神器呢? 因為在大廠的面試環節、以及很多的比如 - Springboot - Mybatis 等開源框架中、大量的使用到了設計模式。為了我們在之後學習原始碼的時候不再懵逼,為啥這程式碼能這樣

java面向對象設計模式(四)

工廠方法模式 java 選擇 缺點 一個 聯系 面向 抽象工廠 pan 第五式 抽象工廠模式 定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。(創建的對象之間有約束) 抽象工廠模式的本質:選擇產品簇的實現 優點:分離接口和產品簇,使得切換產品簇變得

Java設計模式-狀態模式

維護 chan str else 開關 進行 private 接下來 csdn 概念:狀態模式把所研究的對象的行為包裝在不同的狀態對象裏。每個狀態對象都屬於一個抽象狀態類的一個子類。狀態模式的意圖是讓一個對象在其內部狀態改變的時候。其行為也隨之改變,也就是不同狀態相應

第11章 Tomcat的系統架構設計模式

必須 ket 聲明 命令模式 基本 ner 虛擬主機 fec 啟動 11.1 Tomcat總體設計   11.1.1 Tomcat總體架構   Tomcat和核心有連個組件:Connector和Container,Connector是可以被替換的。一個container可以

設計模式原則(3)--Dependency Inversion Principle(DIP)--依賴倒轉原則

以及 .get 依賴註入 不能 通過 而是 耦合度 面向實現 看書 1.定義:   高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。   抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對接口編程,而不是針對實現編程。 2

Spring 框架的設計理念設計模式分析

問題 面向對象編程 -h oop ram 重要 原因 依賴 object 轉自: https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring 的設計理念 前面介紹了 Spring 的三

西遊記之設計模式原則——單一職責原則

void 可能 equals main person 方法 隱患 客戶端代碼 p s 單一職責原則 ——專心致誌只做一件事 1 package danyizhize; 2 3 class SunWuKong { 4 public void XiangM

設計模式原則

輸入參數 實現 而不是 -m mark pos div 方法 blog 設計模式原則 * 開發/封閉原則 * 控制反轉原則 * 接口隔離原則 * 單一職責原則 開發/封閉原則 類或對象及其方法對於擴展來說,應該是開放的,但是對於修改來說,應該是封閉的 控制反轉原則 高層次

java設計模式-----3抽象工廠模式

log 情況下 屬於 運行 title nds 們的 println 支持   抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況

我的多線程—多線程設計模式閱讀筆記

圖解java多線程與設計模式 多線程 設計模式 java多線程與設計模式1.Producer-Consumer模式 我來做,你來用 命名生產消費者模式. 生產者和消費者只有一個成為Pipe模式如何解決兩者之間處理速度差異的問題? data