一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 解析Java編程中設計模式的開閉原則的運用

解析Java編程中設計模式的開閉原則的運用

2020-03-26 14:13lixiang0522 JAVA教程

這篇文章主要介紹了解析Java編程中設計模式的開閉原則的運用,開閉原則多應用于Java程序的擴展開發方面,需要的朋友可以參考下

開閉原則(Open Closed Principle)是Java世界里最基礎的設計原則,它指導我們如何建立一個穩定的、靈活的系統。

定義:

一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。

Softeware entities like classes,modules and functions should be open for extension but closed for modifications.

開閉原則的含義是說一個軟件實體應該通過擴展來實現變化,而不是通過修改已有代碼來實現變化。

軟件實體包括以下幾個部分:

  • 項目或軟件產品中按照一定的邏輯規則劃分的模塊
  • 抽象和類
  • 方法

開閉原則是為軟件實體的未來事物而制定的對現行開發設計進行約束的一個原則。

注意:開閉原則對擴展開放,對修改關閉,并不意味著不做任何修改,低層模塊的變更,必然要有高層模塊進行耦合,否則就是一個孤立無意義的代碼片段了。


變化的類型:

  • 邏輯變化
  • 子模塊變化
  • 可見試圖變化

一個項目的基本路徑應該是這樣的:項目開發、重構、測試、投產、運維,其中的重構可以對原有的設計和代碼進行修改,運維盡量減少對原有代碼修改,保持歷史代碼的純潔性,提高系統的穩定性。


開閉原則的重要性:

1.開閉原則對測試的影響
開閉原則可是保持原有的測試代碼仍然能夠正常運行,我們只需要對擴展的代碼進行測試就可以了。

2.開閉原則可以提高復用性
在面向對象的設計中,所有的邏輯都是從原子邏輯組合而來的,而不是在一個類中獨立實現一個業務邏輯。只有這樣代碼才可以復用,粒度越小,被復用的可能性就越大。

3.開閉原則可以提高可維護性
面向對象開發的要求。
 

如何使用開閉原則:

1.抽象約束
第一,通過接口或者抽象類約束擴展,對擴展進行邊界限定,不允許出現在接口或抽象類中不存在的public方法;

第二,參數類型、引用對象盡量使用接口或者抽象類,而不是實現類;

第三,抽象層盡量保持穩定,一旦確定即不允許修改。

2.元數據(metadata)控制模塊行為
元數據就是用來描述環境和數據的數據,通俗地說就是配置參數,參數可以從文件中獲得,也可以從數據庫中獲得。

Spring容器就是一個典型的元數據控制模塊行為的例子,其中達到極致的就是控制反轉(Inversion of Control)

3.制定項目章程
在一個團隊中,建立項目章程是非常重要的,因為章程中指定了所有人員都必須遵守的約定,對項目來說,約定優于配置。

4.封裝變化
對變化的封裝包含兩層含義:

第一,將相同的變化封裝到一個接口或者抽象類中;

第二,將不同的變化封裝到不同的接口或抽象類中,不應該有兩個不同的變化出現在同一個接口或抽象類中。

 

例子

下面來個例子,先是不好的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class GraphicEditor {
  public void drawShape(Shape s) {
    if (s.m_type==1)
      drawRectangle(s);
    else if (s.m_type==2)
      drawCircle(s);
  }
  public void drawCircle(Circle r) {....}
  public void drawRectangle(Rectangle r) {....}
 }
  
 class Shape {
  int m_type;
 }
  
 class Rectangle extends Shape {
  Rectangle() {
    super.m_type=1;
  }
 }
  
 class Circle extends Shape {
  Circle() {
    super.m_type=2;
  }
 

當我們要擴展一個形狀時,需要先了解GraphicEditor類,然后在drawShape中添加新的類型,然后再添加函數。下面是改進后的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class GraphicEditor {
  public void drawShape(Shape s) {
    s.draw();
  }
 }
  
 class Shape {
  abstract void draw();
 }
  
 class Rectangle extends Shape {
  public void draw() {
    // draw the rectangle
  }
 


不需要了解繪制邏輯,把具體實現放到了子類。

 

總結:
1. 遵守開閉原則可以提高軟件擴展性和維護性。
2. 大部分的設計模式和設計原則都是在實現開閉原則。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费看成年视频网页 | 欧美va在线高清 | 青青草人人 | 91制片厂制作果冻传媒2021 | 和老外3p爽粗大免费视频 | 俄罗斯美女大逼 | 国内精品久久久久影院男同志 | 好吊色青青青国产综合在线观看 | 欧美激烈精交gif动态图18p | 男女精品视频 | 亚洲九九九 | 日本加勒比在线精品视频 | 日本高清有码视频 | 1024国产高清精品推荐 | 国产美女做爰免费视频软件 | 欧美一区二区三区四区在线观看 | 欧式午夜理伦三级在线观看 | 男女姓交大视频免费观看 | 国产一区二区三区福利 | 国产一线天 | 国产成人亚洲精品一区二区在线看 | 四虎国产欧美成人影院 | 国产-第1页-草草影院 | 婷婷在线成人免费观看搜索 | 狠狠色综合久久久久尤物 | 精品午夜寂寞影院在线观看 | 青青青手机视频 | 亚洲精品成人AV在线观看爽翻 | 亚洲aⅴ男人的天堂在线观看 | 四虎国产精品免费入口 | 国产亚洲福利精品一区 | 国产精品永久免费自在线观看 | 日本色午夜 | www.日本免费 | 日韩欧美国产一区 | 从后面撕开老师的丝袜动态图 | 99这里只有精品66视频 | 91精品国产高清久久久久 | 国产精品99在线观看 | 成人精品一区二区三区中文字幕 | 青青草在视线频久久 |