设计模式-----Facade Pattern

  • Facade Pattern

  • 在外观模式中,外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。

  • Facade模式角色分析

  • Facade角色: 是在客户端直接调用的角色,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理;

  • Subsystem classes 子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能。

外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。

  • 外观模式适用情况包括:
    要为一个复杂子系统提供一个简单接口;客户程序与多个子系统之间存在很大的依赖性;在层次化结构中,需要定义系统中每一层的入口,使得层与层之间不直接产生联系。

  • 代码示例

/*
 * facade Pattern
 * 
 */
using System;
using System.Collections.Generic;

namespace Pattern03
{

    class Program
    {

        static void Main(string[] args)
        {

            Facade facade = new Facade();

            facade.MethodA();
            facade.MethodB();


            Console.ReadKey();

        }

    }

    /// <summary>
    /// Facade 
    /// </summary>
    class Facade
    {
        public SubsysClassA _one;
        public SubsysClassB _two;
        public SubsysClassC _three;
        public SubsysClassD _four;

        public Facade()
        {
            _one = new SubsysClassA();
            _two = new SubsysClassB();
            _three = new SubsysClassC();
            _four = new SubsysClassD();
        }
        public void MethodA()
        {
            Console.WriteLine("facade methodA()");
            _one.MethodOne();
            _two.MethodTwo();
            _three.MethodThree();
        }
        public void MethodB()
        {
            Console.WriteLine("facadec methodB()");
            _three.MethodThree();
            _four.MethodFour();
        }
    }
    class SubsysClassA
    {
        public void MethodOne()
        {
            Console.WriteLine(" SubsysClassA method");
        }
    }
    class SubsysClassB
    {
        public void MethodTwo()
        {
            Console.WriteLine(" SubsysClassB Method Two");
        }
    }
    class SubsysClassC
    {
        public void MethodThree()
        {
            Console.WriteLine("SubsysClassC Method Three");
        }
    }
    class SubsysClassD
    {
        public void MethodFour()
        {
            Console.WriteLine("SubsysClassD Method Four");
        }
    }

   

}

  • 类图
    在这里插入图片描述

  • 迪米特法则
    迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其它对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时。还有一个类也可能发生变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值