⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 facaderealworld.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Text;

//外观模式(Facade)
//意图
//    为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
//适用性
      //1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。
      //    大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,
      //    但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,
      //    这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
      //2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
      //3.当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。
      //    如果子系统之间是相互依赖的,你可以让它们仅通过Facade 进行通讯,从而简化了它们之间的依赖关系。

namespace DesignPattern.FacadeRealWorld
{
    class FacadeRealWorld : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            // Facade 
            Mortgage mortgage = new Mortgage(); 
            
            // Evaluate mortgage eligibility for customer 
            Customer customer = new Customer("Ann McKinsey"); 
            bool eligable = mortgage.IsEligible(customer,125000); 
            
            DesignPattern.FormMain.OutputInfo("\n" + customer.Name + " has been " + (eligable ? "Approved" : "Rejected")); 
            
            // Wait for user 
            //Console.Read();
        }
    }
    // "Subsystem ClassA"
    class Bank 
    {
        public bool HasSufficientSavings(Customer c, int amount) 
        {
            DesignPattern.FormMain.OutputInfo("Check bank for " + c.Name); 
            return true; 
        }
    }
    
    // "Subsystem ClassB" 
    class Credit 
    {
        public bool HasGoodCredit(Customer c)
        {
            DesignPattern.FormMain.OutputInfo("Check credit for " + c.Name); 
            return true; 
        }
    }
    
    // "Subsystem ClassC" 
    class Loan 
    {
        public bool HasNoBadLoans(Customer c) 
        {
            DesignPattern.FormMain.OutputInfo("Check loans for " + c.Name); 
            return true; 
        }
    }
    
    class Customer 
    {
        private string name; 
        
        // Constructor 
        public Customer(string name)
        {
            this.name = name; 
        }
        
        // Property 
        public string Name 
        {
            get 
            {
                return name; 
            }
        }
    }
    
    // "Facade" 
    class Mortgage 
    {
        private Bank bank = new Bank(); 
        private Loan loan = new Loan(); 
        private Credit credit = new Credit(); 
        public bool IsEligible(Customer cust, int amount) 
        {
            DesignPattern.FormMain.OutputInfo("{0} applies for {1:C} loan\n", cust.Name, amount); 
            bool eligible = true; 
            
            // Check creditworthyness of applicant 
            if (!bank.HasSufficientSavings(cust, amount)) 
            {
                eligible = false; 
            }
            else if (!loan.HasNoBadLoans(cust)) 
            {
                eligible = false; 
            }
            else if (!credit.HasGoodCredit(cust)) 
            {
                eligible = false; 
            }
            return eligible; 
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -