设计模式—门面模式

参考:https://www.cnblogs.com/studydp/p/9535599.html

1什么是门面模式(外观模式)

2门面模式有什么优势

3门面模式有什么缺点

4怎么使用门面模式

定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。(举个例子:你想去淘宝上卖一本书,你需要先注册账号,将货品上架,设置价格,等待出售,你需要经过步骤才能去卖书(步骤不能省略),若都在上端实现,则上端和下端强耦合,这时候使用门面模式,降低耦合,一般用于分层架构)

2门面模式有什么优势:(1)、外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
           (2)、外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户。

3门面模式有什么劣势:(1)、如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了”开——闭原则“(不过这点也是不可避免)。

using System;
using System.Collections.Generic;
using System.Linq;

namespace FacedeModel
{
    /// <summary>
    /// 外观模式适合分层架构,中间层,创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合
    ///举个例子:例如你去超市买东西,必须要经过进去,买东西这两个步骤,不可避免,若全在上端完成则造成强耦合,影响过多则需要一个中间类来替代
    ///    
    /// </summary>
    class Program
    {
        public abstract class AbsLoad
        {
            public abstract bool Load();
        }
        public abstract class AbsBuy
        {
            public abstract bool Buy();
        }
        public class HualianLoad : AbsLoad
        {
            public override bool Load()
            {
                return true;
            }
        }
        public class HualianBuy : AbsBuy
        {
            public override bool Buy()
            {
                return true;
            }
        }

        public abstract class AbsFacede
        {
            public abstract void BuySomething();
        }


        public class Facede : AbsFacede
        {
            private static AbsBuy Buy = new HualianBuy();
            private static AbsLoad Load = new HualianLoad();

            private Facede()
            { }

            private static Facede facede = new Facede();

            public static Facede CreateInstance()
            {
                return facede;
            }

            public override void BuySomething()
            {
                if (!Load.Load())
                {
                    Console.WriteLine("未进入超市");
                }
                else if (!Buy.Buy())
                {
                    Console.WriteLine("未买东西");
                }
                else
                {
                    Load.Load();
                    Buy.Buy();
                }
            }
        }


        static void Main(string[] args)
        {
            Facede facede = Facede.CreateInstance();
            facede.BuySomething();


        }
    }
}

在以下情况下可以考虑使用外观模式:
           (1)、外一个复杂的子系统提供一个简单的接口
           (2)、提供子系统的独立性
           (3)、在层次化结构中,可以使用外观模式定义系统中每一层的入口。其中三层架构就是这样的一个例子。

总结:

           Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式。注意区分Facade模式、Adapter模式、Bridge模式与Decorator模式:
  Facade模式注重简化接口
  Adapter模式注重转换接口
  Bridge模式注重分离接口(抽象)与其实现
  Decorator模式注重稳定接口的前提下为对象扩展功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值