中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

系統(tǒng)架構技能之設計模式—外觀模式

  一、上篇回顧

  上篇我們主要講述了創(chuàng)建型模式中的最后一個模式-原型模式,我們主要講述了原型模式的幾類實現(xiàn)方案,和原型模式的應用的場景和特點,原型模式適合在哪些場景下使用呢?我們先來回顧一下我們上篇講述的3個常用的場景。

  1、我們在運行態(tài)的時候,動態(tài)的創(chuàng)建一個動態(tài)類型的對象的時候,可能我們使用原型模式,可以動態(tài)的創(chuàng)建指定類型的副本,這無疑是好的選擇,否    則如果通過我們前面講述的幾個創(chuàng)建型模式來實現(xiàn)的話,效率和代價上是非常大的。

  2、有的時候我們需要對比一個對象在處理前和處理后進行對象狀態(tài)的對比,對比是否處理后對象的狀態(tài)是否發(fā)生變化,或者是其他的要求。這個時候通過原型模式來克隆對象的副本,遠比通過引入其他的Factory或者abstract Factory 來的有效和更容易實現(xiàn)。

  3、如果我們發(fā)現(xiàn)有一類這樣的對象,這類對象通常來說比較簡單,并且這類對象之間的差別很有規(guī)律,并且這類對象數(shù)量一般有限,那么這個時候,我們通過原型模式來做的話,通過一個對象來復制創(chuàng)建其他類型的對象可能比通過引入其他的Factory或者abstract Factory 更容易實現(xiàn),而且只需要對象本身提供一個Clone()方法即可。

  4、有的時候我們的項目中有這樣的情況,我們是在別人的功能的基礎上進行擴展,我們有不能修改現(xiàn)有的程序,如果這個應用程序是基于其他類型的創(chuàng)建型模式,那么如果我們在系統(tǒng)中新增一個類型的時候,我們需要修改統(tǒng)一的創(chuàng)建型模式中的代碼,不管是修改配置文件還是具體的功能代碼,無疑都是要修改的,那么如果我們通過原型模式的話,只需要在新增類型的對象內(nèi)部,提供一個克隆方法即可,完成新對象的創(chuàng)建。

  通過上面的情況,那么我們也能大概看出來原型模式的有一個前提,就是必須是基于對象之上調(diào)用Clone()方法完成對象的復制,如果沒有創(chuàng)建這個對象的話,可能不能直接使用該方法。

  我們也講述了,對于Clone()對象的時候,深復制和淺復制的情況,還包括通過序列化對象的形式來完成對象的深復制。

  二、摘要

  本文主要是講述結(jié)構型模式中一個比較常用的模式-外觀模式,這個模式呢,有個最大的特點將細粒度的對象包裝成粗粒度的對象,應用程序通訪問這個外觀對象,來完成細粒度對象的調(diào)用,外觀模式一般是分布式應用和系統(tǒng)架構中的應用服務層的設計中常用的方式,并且一般結(jié)合外觀模式+DTO來完成服務層的設計,提供分布式應用服務的高效服務,外觀模式我們可以這樣理解,我們通過外觀的包裝,使應用程序只能看到外觀對象,而不會看到具體的細節(jié)對象,這樣無疑會降低應用程序的復雜度,并且提高了程序的可維護性。本文將會從以下幾個方面進行講述:

  1、外觀模式的使用場景和特點

  2、外觀模式的實現(xiàn)方案。

  3、總結(jié)外觀模式。

  我們這里先給出一個外觀模式的原理圖:

clip_image001  這是未使用外觀模式之前的情況,下面給出使用外觀模式后的情形:

clip_image002  通過外觀對象來組織細粒度的服務的調(diào)用,外觀對象提供給外部應用程序以使用的服務,而具體的調(diào)用細粒度的過程則被外觀對象給封裝起來,當然這個過程就是封裝變化的部分,而將變化的部分與應用程序進行隔離,無疑對程

序的易用性和可維護性都是很大的提高。

  三、本文大綱

  a、上篇回顧。

  b、摘要。

  c、本文大綱。

  d、外觀模式的特點及使用場景。

  e、外觀模式的實現(xiàn)方案。

  f、外觀模式使用總結(jié)。

  四、外觀模式的特點及使用場景

  外觀模式的主要思想是將復雜的細粒度的對象服務包裝成簡單的易使用的粗粒度的功能服務,我們大家最容易理解和知道的外觀模式就是,使用的API接口的封裝,我們將第三方的API接口引入到我們的項目中的時候,我們需要對這些接口進行包裝,將細粒度的具體調(diào)用過程進行包裝成外觀類的形式,通過外觀類來進行統(tǒng)一的調(diào)用。我們平時把一些常用的公共方法也可以簡易的稱之為外觀模式,我們將復雜的細粒度的功能,包裝成一個比較通用的簡易的的粗粒度的功能。我們來看看哪些場景下,我們使用外觀模式很適合呢?

      1、我們在使用第三方類庫或者API的時候,我們通過本地的API接口的封裝,來完成對第三方API接口的粗粒度外觀對象,通過這個外觀對象可以很容易的完成服務的調(diào)用。我們這里舉例說明吧,例如現(xiàn)在我有一個發(fā)送手機短信的API接口,是第三方提供給我的API接口,那么我如何包裝呢?下面給出對API封裝的相關代碼和說明:

public class MessageHelper
{
private static readonly MessageHelper instance = new MessageHelper();

#region API接口

[DllImport(
"EUCPComm.dll", EntryPoint = "SendSMS")] //即時發(fā)送
private static extern int SendSMS(string sn, string mn, string ct, string priority);

[DllImport(
"EUCPComm.dll", EntryPoint = "SendSMSEx")] //即時發(fā)送(擴展)
private static extern int SendSMSEx(string sn, string mn, string ct, string addi, string priority);

[DllImport(
"EUCPComm.dll", EntryPoint = "SendScheSMS")] // 定時發(fā)送
private static extern int SendScheSMS(string sn, string mn, string ct, string ti, string priority);

#endregion

#region 對上面的API包裝后的方法
public int SendSMSEx1(string sn, string mn, string ct, string addi, string priority)
{
return SendSMSEx(sn, mn, ct, addi, priority);
}
public int SendSMS1(string sn, string mn, string ct, string priority)
{
return SendSMS(sn, mn, ct, priority);
}
public int SendScheSMS1(string sn, string mn, string ct, string ti, string priority)
{
return SendScheSMS(sn, mn, ct, ti, priority);
}
 
#endregion
}

it知識庫系統(tǒng)架構技能之設計模式—外觀模式,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: av免费网站在线观看 | 成人在线观看网址 | 免费一级黄 | 亚洲欧美精品在线观看 | 激情91| 亚洲欧美一区二区三区国产精品 | 亚洲成人一级 | 欧美黄色性生活视频 | 精品日韩在线观看 | 一区二区三区观看视频 | av乱码| 亚洲一区二区三区国产 | 国产精品成人一区二区三区夜夜夜 | 国产免费一区二区 | 精品精品视频 | 日韩精品免费看 | 一区二区三区精品在线视频 | 国产在线小视频 | 国产精品久久久久久二区 | 久久精品二区 | 久久久www成人免费精品 | 祝你幸福电影在线观看 | 亚洲二区视频 | www.五月天婷婷.com | 日本污视频| 黄色三级在线播放 | 天天综合国产 | 亚洲欧美国产毛片在线 | 国产在线视频一区二区董小宛性色 | 久久亚洲高清 | 91精品国产综合久久久久久丝袜 | 国产剧情一区二区三区 | 99精品久久久久 | 亚洲精品综合 | 欧美电影在线观看网站 | 国产精品日韩欧美一区二区三区 | 狠狠操狠狠搞 | 在线亚洲免费视频 | 亚洲激情综合 | 日韩伦理一区二区 | 久久这里有精品 |