外观模式
有点像命令模式的样子,但是命令模式是将步骤定义在抽象基类中,抽象方法也定义在抽象基类中,子类实现这些类,去实现。(适用于大致步骤相同,内部逻辑不同)
而外观模式则是将逻辑直接写在外观类中(适用于操作固定,内部逻辑也不变,某种情况下重复出现)
外观模式,就是不需要将所有内部都展示出来,用户看到的是外观,使用的也是外观,他知道这个外观是干什么的就可以,具体内部如何实现,他不需要关心了,需要由外观模式类帮助实现。
最简单最易懂的案例,书写外观模式
案例:银行系统给人发贷款的时候,需要检查这个人银行资金、是否有贷款、信用情况,如果每次检查一个人的时候,操作员每个分别检查,那么代码重复的厌恶性就出现了,我们将这些检查封装成外观模式,这样检查某个人的时候,只需要使用外观模式类,简单明了
#region 用户 class Customer { private string _name; public Customer(string name) { this._name = name; } public string Name { get { return _name; } } } #endregion
#region 具体需要判别的系统类 //银行系统 class Bank { public bool HasSufficientSavings(Customer customer,int amount) { Console.WriteLine("检查{0}借{1:C}是否通过",customer.Name,amount); return true; } } //信用系统 class Credit { public bool HasGoodCredit(Customer customer) { Console.WriteLine("检查{0}信用是否通过",customer.Name); return true; } } //贷款系统 class Loan { public bool HasNoBadLoans(Customer customer) { Console.WriteLine("检查{0}是否无不良贷款记录", customer.Name); return true; } } #endregion
#region 外观类 class Mortgage { private Bank bank = new Bank(); private Credit credit = new Credit(); private Loan loan = new Loan(); public bool IsEligible(Customer customer,int amount) { bool isOk = true; if (!(bank.HasSufficientSavings(customer,amount)&&credit.HasGoodCredit(customer)&&loan.HasNoBadLoans(customer))) { isOk = false; } return isOk; } } #endregion
static void Main(string[] args) { Customer customer = new 外观模式.Customer("小丽"); Mortgage mortgage = new Mortgage(); Console.WriteLine("是否可以借款?"+mortgage.IsEligible(customer,20000)); Console.ReadKey(); }