日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

外观模式(三层解耦)

發布時間:2024/7/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 外观模式(三层解耦) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  說到外觀模式,很容易想到的是設計一件漂亮的衣服然后穿上自己的身上,讓自己看起來更加的漂亮,但是這個可能并不是這樣子的,從更深層次的來說,外觀更應該是所見即所得的,對于觀眾來說,看起來可能就是很簡單,但是里面所有的東西的復雜程度,我們并不知道。

  在程序開發的過程中,我們時常的會用到一些類與類之間的關聯關系,或者直接通過一個操作來實現多個事情,那么怎樣做到呢,很容易想到,我們可以在一個方法里面實現多種行為,將這些方法放在一個類中,這個類就成了我們的外觀類,在進行與外界交互的時候,我們不需要再進行復雜的操作,直接調用外觀類里面的方法就能實現了。

  說了這么多,那么什么是外觀模式呢?外觀模式,為子系統的一組接口提供了一個統一的界面,此模式定義了一個高級的接口,這個接口使得這一子系統更加容易使用。

  外觀模式的主要用于解耦、減少依賴關系、為新舊系統交互提供接口,下面看一下外觀模式的UML圖:

  

  通過上圖,我們可以看出減少了Client與子系統的依賴關系,降低了Client與子系統之間的耦合度,同時Fecade也充當了接口的作用,下面我們通過外觀模式實現三層的表現層與業務邏輯層的解耦:

  三層UML圖:

  

  首先,建立Models層,并添加相應的類,包括Student類、Grade類、StudentAndGrade類,代碼如下:

namespace Demo.Models {public class Student{public int ID { get; set; }public string Name { get; set; }public int Age { get; set; }public int GradeID { get; set; }} } Student namespace Demo.Models {public class Grade{public int GradeID { get; set; }public string GradeName { get; set; }} } Grade namespace Demo.Models {public class StudentAndGrade{public Student stu { get; private set; }public Grade grade { get; private set; }public StudentAndGrade(int StuID, string Name, int Age, int GradeID, string GradeName){stu = new Student() { ID = StuID, Name = Name, Age = Age };grade = new Grade() { GradeID = GradeID, GradeName = GradeName };}} } StudentAndGrade

  接著,建立DAL層,用于實現對Student和Grade的增加和查詢,包含StudentDAL類、GradeDAL類,代碼如下:

namespace Demo.DAL {/// <summary>/// 和數據庫進行交互的,先使用集合進行模擬/// </summary>public class StudentDAL{private static List<Student> List = new List<Student>();public List<Student> GetAllStudents(){return List;}public bool Add(Student stu){try{List.Add(stu);return true;}catch (Exception){return false;}}} } StudentDAL namespace Demo.DAL {public class GradeDAL{private List<Grade> List = new List<Grade>(){//new Grade() { GradeID=1, GradeName= "C#"},//new Grade() { GradeID=2,GradeName="ADO.Net"},//new Grade() { GradeID=3,GradeName="Asp.Net"} };public List<Grade> GetAllGrades(){return List;}public bool Add(Grade grade){try{List.Add(grade);return true;}catch (Exception){return false;throw;}}} } GradeDAL

  然后,建立Facade層,定義FacadePattern類實現添加StudentAndGrade對象的方法,并且實現獲取所有所有的學生、年級信息的方法,代碼如下:

namespace Demo.Facade {public class FacadePattern{private StudentBLL studentBLL = null;private GradeBLL gradeBLL = null;public FacadePattern(){studentBLL = new StudentBLL();gradeBLL = new GradeBLL();}public void Add(StudentAndGrade StudentAndGrade){studentBLL.Add(StudentAndGrade.stu);gradeBLL.Add(StudentAndGrade.grade);}public List<Student> GetAllStudents(){return studentBLL.GetAllStudents();}public List<Grade> GetAlllGrades(){return gradeBLL.GetAllGrades();}} } FacadePattern

  最后,建立UI層,用于數據的添加和展示,具體代碼如下:

class Program{static void Main(string[] args){StudentAndGrade StudentAndGrade = new StudentAndGrade(1, "張三", 20, 1, "大一新生");FacadePattern facade = new FacadePattern();facade.Add(StudentAndGrade);List<Student> stuList = facade.GetAllStudents();foreach (Student stu in stuList){Console.WriteLine("{0},{1},{2}", stu.ID, stu.Name, stu.Age);}List<Grade> gradeList = facade.GetAlllGrades();foreach (Grade grade in gradeList){Console.WriteLine("{0},{1}", grade.GradeID, grade.GradeName);}Console.ReadKey();}} Main

  整個代碼已經實現了表現層與業務邏輯層的解耦,減少了它們之間的依賴關系,同時說明了Facade也能作為新舊系統之間的接口使用,這也是外觀模式的典型應用。

  本篇文章外觀設計模式至此,謝謝您收看我的博客。

  

轉載于:https://www.cnblogs.com/mointor/p/5169564.html

總結

以上是生活随笔為你收集整理的外观模式(三层解耦)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。