zoukankan      html  css  js  c++  java
  • 设计模式学习之外观模式(Facade,结构型模式)(8)

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

    2.为什么要使用外观模式
    在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,从而导致客户程序随着子系统的变化而变化,那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?

    现在来考虑这样一个抵押系统,当有一个客户来时,有如下几件事情需要确认:
    到银行子系统查询他是否有足够多的存款,到信用子系统查询他是否有良好的信用,到贷款子系统查询他有无贷款劣迹。只有这三个子系统都通过时才可进行抵押。我们先不考虑Facade模式,那么客户程序就要直接访问这些子系统,分别进行判断。

     private static void Main(string[] args)
            {
                //外观,封装子系统
                Mortgage mortgage = new Mortgage();
    
                Customer customer = new Customer("Ann McKinsey");
                bool eligable = mortgage.IsEligible(customer, 125000);
    
                Console.WriteLine("
    " + customer.Name +
                    " has been " + (eligable ? "Approved" : "Rejected"));
                Console.ReadLine();
            }
            //顾客类
            public class Customer
            {
                private string _name;
    
                public Customer(string name)
                {
                    this._name = name;
                }
    
                public string Name
                {
                    get { return _name; }
                }
            }
    
            //银行子系统
            public class Bank
            {
                public bool HasSufficientSavings(Customer c, int amount)
                {
                    Console.WriteLine("Check bank for " + c.Name);
                    return true;
                }
            }
    
            //信用子系统
            public class Credit
            {
                public bool HasGoodCredit(Customer c)
                {
                    Console.WriteLine("Check credit for " + c.Name);
                    return true;
                }
            }
    
            //贷款子系统
            public class Loan
            {
                public bool HasNoBadLoans(Customer c)
                {
                    Console.WriteLine("Check loans for " + c.Name);
                    return true;
                }
    
    
            }
    
            public class Mortgage
            {
                private Bank bank = new Bank();
                private Loan loan = new Loan();
                private Credit credit = new Credit();
    
                public bool IsEligible(Customer cust, int amount)
                {
                    Console.WriteLine("{0} applies for {1:C} loan
    ",
                      cust.Name, amount);
    
                    bool eligible = true;
    
                    if (!bank.HasSufficientSavings(cust, amount))
                    {
                        eligible = false;
                    }
                    else if (!loan.HasNoBadLoans(cust))
                    {
                        eligible = false;
                    }
                    else if (!credit.HasGoodCredit(cust))
                    {
                        eligible = false;
                    }
    
                    return eligible;
                }
            }

    可以看到引入Facade模式后,客户程序只与Mortgage发生依赖,也就是Mortgage屏蔽了子系统之间的复杂的操作,达到了解耦内部子系统与客户程序之间的依赖。

    Facade模式在实际开发中最多的运用当属开发N层架构的应用程序了

  • 相关阅读:
    leepcode题目解析4
    Python爬虫6-利用ProxyHandler设置代理服务器
    Python爬虫5-利用usergent伪装访问方式
    Python爬虫4-URLError与HTTPError
    Python爬虫3-parse编码与利用parse模拟post请求
    中间件
    跨域
    ORM中的锁和事务
    cookie和session
    之Ajax
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3835540.html
Copyright © 2011-2022 走看看