zoukankan      html  css  js  c++  java
  • C#设计模式:外观模式(Facade Pattern)

    一,什么是外观模式?

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

    二,我们看看代码的实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _10.外观模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                //不存在外观类是我们的调用方法是这样的,如下代码;
                //People p = new People("中国人");
                //Event e = new Event();
                //Console.Write(p.people);
                //e.Say();
    
    
                //外观系统,跟以上代码比较,我们可以知道:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。而不用实例过多,同时也降低了客户端和子系统之间的紧耦合,如People和Event的实例都不在Program中了
                Facade fa = new Facade("中国人");
                fa.WhoEvent();
    
                Facade fa1 = new Facade("美国人");
                fa1.WhoEvent();
                Console.Read();
            }
        }
        /// <summary>
        /// 外观类
        /// </summary>
        public class Facade
        {
            private Event ev { get; set; }
            private People pe { get; set; }
    
            public Facade(string people) 
            {
                ev = new Event();
                pe = new People(people);
            }
            public void WhoEvent() 
            {
                Console.Write(pe.people);
                ev.Say();
                ev.Eat();
            }
        }
         /// <summary>
         /// 相当于行为子系统
         /// </summary>
        public class Event
        {
            public void Say()
            {
                Console.Write("说话和");
            }
            public void Eat()
            {
                Console.WriteLine("吃饭");
            }
        }
        /// <summary>
        /// 相当于人子系统
        /// </summary>
        public class People
        {
            public string people { get; set; }
            public People(string p)
            {
                this.people = p;
            }
        }
    }

    三,在上面代码中,我们的代码结构是:客户端--》Facade--》n个子系统(People和Event等)

    1》在外观模式中我们,完全将子系统的实例放到外观里面,这里我们可以将提供了一个一直的界面,客户端可以直接通过外观类来调用内部子系统中方法,而避免了耦合

    四,那外观模式和适配器模式有什么区别呢?

     适配器:Adapter适配器模式是将两个不兼容的类组合在一起使用

    外观模式:为子系统中的一组接口提供一个一致的界面

    根据以上两个解释我们可以知道:

    1》适配器是针对单个对象,而外观模式是针对多个对象(子系统)的

    2》适配器是对单个对象的接口适配,从而实现现有了类可以适配当前系统的结果

    3》而外观模式则是将多个子系统的接口包装起来,实现降低耦合和共同调用,和适配器模式的意图是不一样的

  • 相关阅读:
    Compiling Open Source Software for UNIX using Configure Script
    vlcandroid 移植live555到android
    xcode中armv6与armv7的困惑
    ZOJ 3204 Connect them (最小生成树,输出字典序最小的解)
    POJ 3133 Manhattan Wiring (插头DP)
    HDU 4419 Colourful Rectangle 第37届ACM/ICPC 杭州赛区网络赛 1010题 (线段树)
    HDU 3829 Cat VS Dog (二分匹配求最大独立集)
    最大流模板(SAP算法)(邻接表形式)
    HDU 4417 Super Mario 第37届ACM/ICPC 杭州赛区网络赛第1008题 (划分树)
    ZOJ 3203 Light Bulb (数学直接推公式 或者 三分法)
  • 原文地址:https://www.cnblogs.com/May-day/p/8670360.html
Copyright © 2011-2022 走看看