zoukankan      html  css  js  c++  java
  • 外观模式

    有点像命令模式的样子,但是命令模式是将步骤定义在抽象基类中,抽象方法也定义在抽象基类中,子类实现这些类,去实现。(适用于大致步骤相同,内部逻辑不同)

    而外观模式则是将逻辑直接写在外观类中(适用于操作固定,内部逻辑也不变,某种情况下重复出现)

     外观模式,就是不需要将所有内部都展示出来,用户看到的是外观,使用的也是外观,他知道这个外观是干什么的就可以,具体内部如何实现,他不需要关心了,需要由外观模式类帮助实现。

    最简单最易懂的案例,书写外观模式

    案例:银行系统给人发贷款的时候,需要检查这个人银行资金、是否有贷款、信用情况,如果每次检查一个人的时候,操作员每个分别检查,那么代码重复的厌恶性就出现了,我们将这些检查封装成外观模式,这样检查某个人的时候,只需要使用外观模式类,简单明了

      #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();
            }

  • 相关阅读:
    React创建组件的方式
    react jsx语法
    mui区域滚动失效的问题
    css3 currentColor
    http协议
    iframe用法
    html关于强制显示、隐藏浏览器的滚动条
    null与undefind的区别(转)
    如何实现背景透明,文字不透明,兼容所有浏览器?
    事件委托
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/12202121.html
Copyright © 2011-2022 走看看