设计模式——外观模式

初识

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

结构

在这里插入图片描述

角色

  • SubSystem子类,子系统类集合实现子系统的功能,处理Facade对象指派的任务。注意子类中没有Facade的任何信息,即没有对Facade对象的引用。
  • Facade外观类,知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。

理解

外观模式,就是不管内部的结构有多复杂,把它们封装起来,设计一个统一调用它们的对外接口,这样,对客户与内部结构进行解耦。

应用

对于炒股新手来说,对于股票的一些知识是了解甚少的,而盲目的炒股会很大几率赔钱,所以,我们可以买基金,买基金相对来说比较安全,我们只需要把钱给基金经理人,他们会去负责买卖股票,而我们到时候坐着数钱就可以了。这里的基金相当属于外观类,有了基金,就不用我们对每一支股票进行了解,分析了。所以,可以说有了外观类,是将内部结构与客户进行解耦。
在这里插入图片描述

实现

class Program
{
   static void Main(string[] args)
   {
       Fund fund = new Fund();

       fund.BuyFund();
       fund.SellFund();

       Console.Read();
   }
}
class Stock1
{
   public void Sell()
   {
       Console.WriteLine("股票1卖出");
   }
   public void Buy()
   {
       Console.WriteLine("股票1买入");
   }
}

class Stock2
{
   public void Sell()
   {
       Console.WriteLine("股票2卖出");
   }
   public void Buy()
   {
       Console.WriteLine("股票2买入");
   }
}

class Stock3
{
   public void Sell()
   {
       Console.WriteLine("股票3卖出");
   }

   public void Buy()
   {
       Console.WriteLine("股票3买入");
   }
}
class Fund
{
   Stock1 gu1;
   Stock2 gu2;
   Stock3 gu3;
   
   public Fund()
   {
       gu1 = new Stock1();
       gu2 = new Stock2();
       gu3 = new Stock3();
   }
   public void BuyFund()
   {
       gu1.Buy();
       gu2.Buy();
       gu3.Buy();
   }
   public void SellFund()
   {
       gu1.Sell();
       gu2.Sell();
       gu3.Sell();
   }
}

优点

  • 符合了依赖倒转原则,依赖于抽象不依赖与具体。
  • 提高了灵活性,不管系统内部如何变化,只要不影响到外观对象,任你自由活动。
  • 提高了安全性,想让你访问子系统的哪些业务就开通哪些逻辑,不在外观上开通的方法,你就访问不到。

何时应用

  1. 在设计初期阶段,要有意识将不同的两个层分离,比如三层架构,要考虑在UI层、B层与D层之间建立外观,可以为复杂的内部架构提供一个简单的接口,使耦合大大降低。
  2. 在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观可以提供一个简单的接口,减少它们之间的依赖。
  3. 在维护一个大型系统时,可能这个系统已经非常难以维护和扩展,可以开发一个外观类,提供设计粗糙或高度复杂的遗留代码的比较清晰的接口,让新系统与外观交互,做到调用外观即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值