博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式:外观模式(Façade Pattern)
阅读量:5898 次
发布时间:2019-06-19

本文共 2445 字,大约阅读时间需要 8 分钟。

作者:  创建于:2006-03-17 出处:  收录于:2013-02-28

示意图


门面模式没有一个一般化的类图描述,下面是一个示意性的对象图:

意图


为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

适用性


  • 为一个复杂子系统提供一个简单接口。
  • 提高子系统的独立性。
  • 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

实现代码


我们平时的开发中其实已经不知不觉的在用Façade模式,现在来考虑这样一个抵押系统,当有一个客户来时,有如下几件事情需要确认:到银行子系统查询他是否有足够多的存款,到信用子系统查询他是否有良好的信用,到贷款子系统查询他有无贷款劣迹。只有这三个子系统都通过时才可进行抵押。

View Code
1 using System; 2 //银行子系统 3 public class Bank 4 { 5     public bool HasSufficientSavings(Customer c, int amount) 6     { 7         Console.WriteLine("Check bank for " + c.Name); 8         return true; 9     }10 }11 //信用证子系统12 public class Credit13 {14     public bool HasGoodCredit(Customer c)15     {16         Console.WriteLine("Check credit for " + c.Name);17         return true;18     }19 }20 //贷款子系统21 public class Loan22 {23     public bool HasNoBadLoans(Customer c)24     {25         Console.WriteLine("Check loans for " + c.Name);26         return true;27     }28 }29 //顾客类30 public class Customer31 {32     private string name;33     public Customer(string name)34     {35         this.name = name;36     }37     public string Name38     {39         get { return name; }40     }41 }42 //外观类43 public class Mortgage44 {45     private Bank bank = new Bank();46     private Loan loan = new Loan();47     private Credit credit = new Credit();48     public bool IsEligible(Customer cust, int amount)49     {50         Console.WriteLine("{0} applies for {1:C} loan\n",51           cust.Name, amount);52         bool eligible = true;53         if (!bank.HasSufficientSavings(cust, amount))54         {55             eligible = false;56         }57         else if (!loan.HasNoBadLoans(cust))58         {59             eligible = false;60         }61         else if (!credit.HasGoodCredit(cust))62         {63             eligible = false;64         }65         return eligible;66     }67 }68 //客户程序类69 public class MainApp70 {71     public static void Main()72     {73         //外观74         Mortgage mortgage = new Mortgage();75         Customer customer = new Customer("Ann McKinsey");76         bool eligable = mortgage.IsEligible(customer, 125000);77         Console.WriteLine("\n" + customer.Name +78             " has been " + (eligable ? "Approved" : "Rejected"));79         Console.ReadLine();80     }81 }

效果及实现要点


1.Façade模式对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。

2.Façade模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。

3.如果应用需要,它并不限制它们使用子系统类。因此你可以在系统易用性与通用性之间选择。

 

转载地址:http://vfhsx.baihongyu.com/

你可能感兴趣的文章
SELinux引起的SSH公钥认证失败问题
查看>>
分布式主键生成策略
查看>>
神兵利器——Alfred
查看>>
wireshark使用
查看>>
Android定位&地图&导航——基于百度地图实现的定位功能
查看>>
条件极值(1):隐函数极值问题
查看>>
陶哲轩实分析定理11.9.1:微积分第一基本定理(一)
查看>>
HTML一些标记
查看>>
ruby 爬虫爬取拉钩网职位信息,产生词云报告
查看>>
如何使Ubuntu在vm里面全屏
查看>>
微软职位内部推荐-Principal Software Eng Mgr
查看>>
.net技术博客地址列表
查看>>
字符串处理 Codeforces Round #305 (Div. 2) A. Mike and Fax
查看>>
python学习——函数及其参数
查看>>
《CLR Via C# 第3版》笔记之(五) - C#中的伪Union类型
查看>>
国王游戏
查看>>
为什么我厌恶扫楼
查看>>
HTTP请求中POST与GET的区别
查看>>
java集合框架03
查看>>
xml文件
查看>>