激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C# 設計模式系列教程-外觀模式

C# 設計模式系列教程-外觀模式

2021-11-23 15:03Wang Juqiang C#

外觀模式松散了客戶端與子系統(tǒng)的耦合關系,讓子系統(tǒng)內(nèi)部的模塊能更容易擴展和維護。

1. 概述

  為子系統(tǒng)中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

2. 模式中的角色

  2.1 外觀類(facade):外觀類知道哪些子系統(tǒng)類負責處理請求,將客戶的請求代理給恰當?shù)淖酉到y(tǒng)對象。

  2.2 子系統(tǒng)類集合(subsystem classes):子系統(tǒng)類集合實現(xiàn)了子系統(tǒng)的功能,處理外觀類對象指派的任務。

3. 模式解讀

  3.1 外觀模式的類圖

C# 設計模式系列教程-外觀模式

  3.2 外觀模式的代碼實現(xiàn)

?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/// <summary>
/// 子系統(tǒng)中的一個類
/// </summary>
public class subsystemone
{
 public void methodeone()
 {
  console.writeline("sub system first method.");
 }
}
 
/// <summary>
/// 子系統(tǒng)中一個類
/// </summary>
public class subsystemtwo
{
 public void methodtwo()
 {
  console.writeline("sub system second method.");
 }
}
 
/// <summary>
/// 子系統(tǒng)中一個類
/// </summary>
public class subsystemthree
{
 public void methodthree()
 {
  console.writeline("sub system third method.");
 }
}
 
/// <summary>
/// 子系統(tǒng)中一個類
/// </summary>
public class subsystemfour
{
 public void methodfour()
 {
  console.writeline("sub system fourth method.");
 }
}
 
/// <summary>
/// 外觀類
/// </summary>
public class facade
{
 private subsystemone one;
 private subsystemtwo two;
 private subsystemthree three;
 private subsystemfour four;
 
 public facade()
 {
  one = new subsystemone();
  two = new subsystemtwo();
  three = new subsystemthree();
  four = new subsystemfour();
 }
 
 public void methoda()
 {
  console.writeline("\nmethod group a----");
  one.methodeone();
  two.methodtwo();
  four.methodfour();
 }
 
 public void methodb()
 {
  console.writeline("\nmethod group b----");
  two.methodtwo();
  three.methodthree();
 }
}

    3.3 客戶端代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
class program
{
 static void main(string[] args)
 {
  // 由于facade的作用,客戶端可以根本不知道子系統(tǒng)類的存在
  facade facade = new facade();
  facade.methoda();
  facade.methodb();
 
  console.read();
 }
}

    運行結果

C# 設計模式系列教程-外觀模式

4. 模式總結

  4.1 優(yōu)點

    4.1.1 facade模式降低了客戶端對子系統(tǒng)使用的復雜性。

    4.1.2 外觀模式松散了客戶端與子系統(tǒng)的耦合關系,讓子系統(tǒng)內(nèi)部的模塊能更容易擴展和維護。

    4.1.3 通過合理使用facade,可以幫助我們更好的劃分訪問的層次。

  4.2 缺點

    過多的或者是不太合理的facade也容易讓人迷惑,到底是調(diào)用facade好呢,還是直接調(diào)用模塊好。

  4.3 適用場景

    4.3.1 需要將設計進行分層時考慮facade模式。

    4.3.2 在開發(fā)階段,子系統(tǒng)往往因為重構變得越來越復雜,增加外觀模式可以提供一個簡單的接口,減少它們之間的依賴。

    4.3.3 在維護一個遺留的大型系統(tǒng)時,可以這個系統(tǒng)已經(jīng)非常難以維護和擴展,可以為新系統(tǒng)開發(fā)一個facade類,來提供設計粗糙或高度復雜的遺留代碼的比較清晰簡單的接口,讓新系統(tǒng)與facade對象交互,facade與遺留代碼交互所有復雜的工作。

5. 應用舉例:分層開發(fā)中,對數(shù)據(jù)訪問層我們增加dataaccess作為對外的接口來操作數(shù)據(jù)庫子系統(tǒng)。

  5.1 實現(xiàn)類圖

C# 設計模式系列教程-外觀模式

  5.2 實現(xiàn)代碼

?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public class employee
{
 public string name { get; set; }
 public int age { get; set; }
 
 public salary salary { get; set; }
}
 
public class salary
{
 public datetime from { get; set; }
 public datetime to { get; set; }
 public decimal amount { get; set; }
}
 
public class employeedataaccess
{
 public void saveemployee(employee employee)
 {
  console.writeline("save employee to database.");
 }
 
 public void deleteemployee(employee employee)
 {
  console.writeline("remode employee from database.");
 }
}
 
public class salarydataaccess
{
 public void savesalary(salary salary)
 {
  console.writeline("save salary to database.");
 }
 
 public void deletesalary(salary salary)
 {
  console.writeline("remove salary from database.");
 }
}
 
/// <summary>
/// dataaccess為客戶端提供一個簡單的接口
/// </summary>
public class dataaccess
{
 private employeedataaccess employeedataaccess = new employeedataaccess();
 private salarydataaccess salarydataaccess = new salarydataaccess();
 
 public void saveemployee(employee employee)
 {
  // 先保存員工基本信息
  employeedataaccess.saveemployee(employee);
 
  // 保存員工薪水信息
  salarydataaccess.savesalary(employee.salary);
 }
 
 public void removeemployee(employee employee)
 {
  // 先刪除員工薪水信息
  salarydataaccess.deletesalary(employee.salary);
 
  // 刪除員工基本信息
  employeedataaccess.deleteemployee(employee);
 }
}

  5.3 客戶端代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
class program
{
 static void main(string[] args)
 {
  dataaccess.dataaccess dataaccess = new dataaccess.dataaccess();
  dataaccess.employee employee = new dataaccess.employee() { salary = new dataaccess.salary(), name = "wang kevin", age = 22 };
 
  dataaccess.saveemployee(employee);
  dataaccess.removeemployee(employee);
 
  console.read();
 }
}

  運行結果

C# 設計模式系列教程-外觀模式

以上就是本文的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 黄色18网站 | 最近日本电影hd免费观看 | 日本一区二区不卡在线观看 | 2021狠狠操 | 神马久久精品综合 | 亚洲国产视频在线 | 久久久久久久爱 | 欧美一级成人一区二区三区 | 午夜91视频| 欧美综合在线观看视频 | 国产精品成人一区二区三区吃奶 | 精品二区在线观看 | 亚洲电影免费观看国语版 | 国产亚洲欧美一区久久久在 | 日韩欧美中文字幕视频 | 五月婷六月丁香狠狠躁狠狠爱 | 夜夜夜影院 | 成人 精品| 精品亚洲福利一区二区 | www.狠狠插.com | 99热高清 | av在线免费播放 | 黄色片在线观看网站 | 久久久经典视频 | 免费日韩片 | 黄色视频a级毛片 | 黄色片快播 | 成人在线观看小视频 | 精品国产乱码久久久久久丨区2区 | 农村寡妇偷毛片一级 | 亚洲网站一区 | 99精品视频在线观看免费播放 | 中文字幕在线永久 | 久久久看 | 亚洲生活片 | 精品中文字幕久久久久四十五十骆 | videos高潮 | 国产免费久久久久 | 成人免费毛片明星色大师 | 特级无码毛片免费视频尤物 | 久久久电影电视剧免费看 |