程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 設計模式六大原則(6)--開閉原則,設計模式六大

設計模式六大原則(6)--開閉原則,設計模式六大

編輯:C#入門知識

設計模式六大原則(6)--開閉原則,設計模式六大


定義:

軟件中的對象(類,模塊,函數等等)應該對於擴展是開放的,但是對於修改是封閉的。

個人理解:

開閉原則通俗的來說就是軟件系統中包含的各種組件,例如模塊(Modules)、類(Classes)以及功能(Functions)等等,應該在不修改現有代碼的基礎上,引入新功能。開閉原則中“開”,是指對於組件功能的擴展是開放的,是允許對其進行功能擴展的;開閉原則中“閉”,是指對於原有代碼的修改是封閉的,即不應該修改原有的代碼。

問題由來:

在軟件的生命周期內,由於需求變動、維護和升級需要對項目部分代碼修改時,可能使沒修改的部分發生錯誤,這就需要對沒修改的部分也要進行測試。

解決方案:

軟件需要變化時,盡量通過擴展原來實體完成修改而不是修改原來代碼,也就是說用抽象構建框架,用實現擴展細節。

其實,開閉原則整個的定義比較模糊,它只是描述了軟件中的對象對於擴展開放,對於修改關閉,但沒有說如何實現。開閉原則算是前5中原則的一個抽象總結,前五種是開閉原則的一些具體實現,所以如果使用開閉原則,其實有點虛,因為它沒有一個固定的模式,但是最終保證的是提高程序的復用性、可維護性等要求。

聯系到前面所說的設計模式原則中的SOLID(單一職責原則、開閉原則、裡氏替換原則、接口隔離原則和依賴倒置原則)以及迪米特法則,將設計模式六大原則除去開閉原則的設計模式原則實現了,也就完成了開閉原則。但是要明確一點,這些原則的實現不是是與否,而是實現的程序是多少。前面所介紹的設計模式前5大原則的作用如下:

  • 單一職責原則告訴我們類的職責要單一;
  • 裡氏替換原則告訴我們不要破壞類的繼承;
  • 依賴倒置原則告訴我們要使用接口;
  • 接口隔離原則告訴我們接口盡量精簡單一;
  • 迪米特法則告訴我們類間耦合性要盡量降低。

最後說明一下如何去遵守這六個原則。對這六個原則的遵守並不是是和否的問題,而是多和少的問題,也就是說,我們一般不會說有沒有遵守,而是說遵守程度的多少。任何事都是過猶不及,設計模式的六個設計原則也是一樣,制定這六個原則的目的並不是要我們刻板的遵守他們,而需要根據實際情況靈活運用。對他們的遵守程度只要在一個合理的范圍內,就算是良好的設計。


AS3簡述一下向上轉換與向下轉換的概念

去百度查一下 裡氏代換原則,這是設計模式的基礎6大設計原則之一

單一職責、裡氏替換(代換)、依賴倒置、接口隔離、迪米特法則、開閉原則

或者直白地說,就是你要搞懂as3.0的 一個統一,兩大分支,事件驅動

一個統一是所有顯示對象歸屬繼承自 flash.display.DisplayObject類
其下分兩大分支
第一分支 flash.display.InteractiveObject (可交互對象) 和 不可交互對象
第二分支 flash.display.DisplayObjectContainer(容器對象) 和 非容器對象

而使用到 向上轉換和向下轉換的情況 在使用事件時很常見

如平時我們

mc.addEventListener(MouseEvent.CLICK, onClick_func);

function onClick_func(_evt:MouseEvent):void{
var _mc:MovieClip = _evt.target as MovieClip;
//這個事件處理函數中 _evt.target as MovieClip; 就使用了向下轉換,把事件傳遞中的
// flash.display.DisplayObject 類型 轉換成其子類 flash.display.MovieClip
}

向上轉換

比如

function setX(_obj:DisplayObject):void{
_obj.x = 100;
}

這個函數的參數使用了 父類 DisplayObject作為類型,那麼表明調用這個函數傳入的參數可以是所有DisplayObject的子類 比如 MovieClip ,比如 SimpleButton ,比如 TextField(文本框) 等等

子類 父類都是基於接口的向上轉換或向下轉換來應用的


 

什是開閉原則

開-閉”原則,即“對擴展開放,對修改關閉”,指的是在軟件設計中,當對某一軟件實體進行擴展時,盡量不要去修改原有的軟件實體,換句話說就是在不修改原有軟件實體的情況下對其進行擴展。這種軟件設計方式其實是一種目標,它考慮了軟件後期的維護等其它因素。一個軟件系統如果可以達到這個目標,那它就是可擴展、易維護的。在軟件設計中,眾多的設計模式的應用就是為了達到這個目標。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved