zoukankan      html  css  js  c++  java
  • 设计模式之笔记--外观模式(Facade)

    外观模式(Facade)

    定义

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

    类图

    描述

    Facade:外观类,外观类知道哪些子系统类负责处理请求,将用户的请求代理给恰当的子系统对象。

    Classes:子系统类,实现了子系统的功能。

          外观模式的实现核心是由外观类去保存各个子系统的引用,客户端只需要引用这个外观类,然后由外观类去调用各个子系统中的方法。

          外观模式将一个或者多个类的复杂的操作进行了隐藏,只显示出一个一致的界面供客户端使用;即外观模式提供一个简洁的外观接口将一个复杂的子系统变得容易使用。

    应用场景

          在饭店,顾客希望来一份微辣的西红柿鸡蛋面,此时顾客并不用关心面条的制作过程,只需要跟服务员说好“来一份西红柿鸡蛋面,微辣”,然后等着服务员把面条端上来就行了。

        /// <summary>
        /// 面条
        /// </summary>
        public class Noodles 
        {
            public void Cook()
            {
                Console.WriteLine("煮面条.");
            }
        }
    
        /// <summary>
        ////// </summary>
        public class Water
        {
            public void Boil()
            {
                Console.WriteLine("烧水.");
            }
        }
    
        /// <summary>
        /// 西红柿
        /// </summary>
        public class Tomato 
        {
            public void Cook()
            {
                Console.WriteLine("加入西红柿.");
            }
        }
    
        /// <summary>
        /// 鸡蛋
        /// </summary>
        public class Egg
        {
            public void Cook()
            {
                Console.WriteLine("打入鸡蛋.");
            }
        }
    
        /// <summary>
        /// 辣椒
        /// </summary>
        public class Pepper
        {
            public void Put()
            {
                Console.WriteLine("放入少许辣椒.");
            }
        }
    
        public class Facade
        {
            private Noodles noodles;
            private Water water;
            private Tomato tomato;
            private Egg egg;
            private Pepper pepper;
    
            public Facade()
            {
                this.noodles = new Noodles();
                this.water = new Water();
                this.tomato = new Tomato();
                this.egg = new Egg();
                this.pepper = new Pepper();
            }
    
            public void Cook()
            {
                this.tomato.Cook();
                this.water.Boil();
                this.noodles.Cook();
                this.egg.Cook();
                this.pepper.Put();
            }
        }
  • 相关阅读:
    计算机代数系统Computer Algebra Software: Mathematica, Maxima, Pari/GP
    计算机代数系统对比:Computer Algebra Software: Mathematica, Maxima, Pari/GP
    搜索大质数的算法PHP版本【算法导论实践】
    使用maxima解决初等数论中的问题:
    练习使用文法剖析工具:
    反查字符的unicode码~
    Maxima Overview:
    Elementary number theory using Maxima
    Word文档结构图内容“越界”问题:
    Maxima, Maple, and Mathematica: the Summary~
  • 原文地址:https://www.cnblogs.com/zhou-yi/p/5403377.html
Copyright © 2011-2022 走看看