設計模式在軟體開發中的應用

2021-08-24 18:53:55 字數 2483 閱讀 4064

首先了解設計模式的概念,及其基本的分類。

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

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

[color=red]建立型設計模式[/color],如工廠方法(factory method)模式、抽象工廠(abstract factory)模式、原型(prototype)模式、單例(singleton)模式,建造(builder)模式等

[color=red]結構型設計模式[/color],如合成(composite)模式、裝飾(decorator)模式、**(proxy)模式、享元(flyweight)模式、門面(facade)模式、橋梁(bridge)模式等

[color=red]行為型模式[/color],如模版方法(template method)模式、觀察者(observer)模式、迭代子(iterator)模式、責任鏈(chain of responsibility)模式、備忘錄(memento)模式、命令(command)模式、狀態(state)模式、訪問者(visitor)模式等等。

以上是三種經典型別,實際上還有很多其他的型別,比如fundamental型、partition型,relation型等等。

先通過幾個簡單例子的說明來介紹在設計模式實際的軟體開發中的使用。

讓我們來看幾段常見但又不夠優雅的**,這些** 「你」、「我」、「他」或許都曾寫過,但是終有一天你也會與我一樣,看著有想撞牆的感覺(如果你寫了n久這樣的**,還沒有這種感覺,八成你是對程式設計不再感興趣了,你對其已經麻木):

[color=red]1.過多的if…else判斷[/color]

if (type == 1) else if (type == 2) else

這是我們在程式設計或者看書中要遇到的一段**,如果條件判斷非常之長,並且其他有些地方也有根據型別來做不同處理的情況。這些**對於後階段的維護簡直是一場噩夢。

[color=red]2.多次載入資源(例如配置檔案的讀取),引起資源損耗[/color]

public static string getproperty(string propkey) throws exception ...

該段**是我以前在乙個專案中寫的一段**,該段**用於讀取工程配置檔案的屬性,但該段**是存在一些問題的,因為在每次獲取屬性時,它都重新載入資源,造成了資源的過多損耗。

在我編碼的過程中,遇到的問題還有很多。不夠優雅的**、過於僵硬的設計,等等,下面我將通過如上兩個例子討論-----

[color=red]

1. 解決過多的if…else判斷問題[/color]

如果在一段**中,不少地方需根據某型別或狀態等做出不同的處理,那當型別或狀態增加時,這些**將會過於僵硬,擴充套件性差,只有在各個分布了if…else的再增加乙個else if,可維護性可想而知。設計模式中有一種模式可以解決該問題,即狀態模式。狀態模式給我們帶來的好處如下:

1) 狀態模式需要對每乙個對每乙個系統可能取得的狀態創立乙個狀態類(state)的子類,當系統的狀態變化時,系統改變所選的子類。與乙個特定的狀態有關的行為都被包裝在乙個特定的物件裡,而且當需要增加新的狀態時,可以以子類的方式將它加到系統裡,從而提高了易維護性和可擴充套件性;

2)由於每乙個狀態都被包裝到了類裡面,避免了使用過多的條件轉移語句。

下面我們對該例進行演示性的改進。我們可以定義乙個型別介面,該類相當於狀態模式中的狀態類。

public inte***ce type

型別1、型別2等可以實現該介面,**略:

[color=red]

2. 解決過度資源損耗問題[/color]

在該例中,每次通過getproperty(…)方法獲取某屬性時,都會重新載入檔案中的所有內容,造成資源的不必要損耗。該設計模式中,對於此種情況,可以通過單例(singleton)模式來優化處理。

import //略

public class propertiesutil ...

//在propertiesmap中獲得propkey屬性,並將值返回(略)}}

可以考慮實現單例模式的地方還有很多,例如:

1)對於計算機的外部資源印表機的情況,因只有乙個printer spooler,為避免兩個列印作業同時輸出到印表機中,可考慮用單例模式實現。

2)window的**站在整個系統中只有唯一的乙個例項,而且**站自行提供自己的例項,**站也是單例模式的應用

總結:在使用了設計模式後,明顯的發現以下幾點::

1) 可以比較好的分工(比如,使用介面型別模式)

2) **組織更有條理(b比如buiilder模式:像查詢的結果,中間的產生過程是非常複雜的,如果不用builder模式,誰去改了,也許過段時間,他自己都忘記了)

但是:[color=red]千萬不能為了模式而模式。重要的是各種模式中的思想,當你理解了思想之後,在實際的開發中不用想著硬套,自己就會想到使用(就算你已經忘記它是什麼模式)。[/color]

原文**:[url]

設計模式 在軟體開發中的應用

論設計模式在軟體開發中的應用 在解決這個論題之前,我們首先要了解設計模式的概念,及其基本的分類。設計模式 這四個字,相信大家在很多地方都會看到,什麼是設計模式呢?乙個設計模式提供一種提煉子系統或軟體系統中的元件的,或者它們之間的關係的綱要設計。設計模式描述普遍存在的在相互通訊的元件中重複出現的結構,...

論設計模式在軟體開發中的應用

在解決這個論題之前,我們首先要了解設計模式的概念,及其基本的分類。設計模式 這四個字,相信大家在很多地方都會看到,乙個設計模式提供一種提煉子系統或軟體系統中的元件的,或者它們之間的關係的綱要設計。設計模式描述普遍存在的在相互通訊的元件中重複出現的結構,這種結構解決在一定的背景中的具有一般性的設計問題...

MBTI在軟體開發團隊中的應用

人絕不是一種資源。一方面我們不可能因人設崗,另一方面也不能忽略人性的差異。面對問題時,不要總是單純地從人的態度或品德上查詢問題,而是要反思人事安排和流程建設上的不足。奢望乙個人改掉他的缺點,還不足充分發揮他的優點。mbti將人區分為16類人格特質,我無法斷言是否真得能表達出人的真實一面,畢竟只是統計...