zoukankan      html  css  js  c++  java
  • 外观模式

    /// <summary>
        /// 以学生选课系统为例子演示外观模式的使用
        /// 学生选课模块包括功能有:
        /// 验证选课的人数是否已满
        /// 通知用户课程选择成功与否
        /// 客户端代码
        /// </summary>
        class Student
        {
            private static RegistrationFacade facade = new RegistrationFacade();
    
            static void Main(string[] args)
            {
                if (facade.RegisterCourse("设计模式", "Learning Hard"))
                {
                    Console.WriteLine("选课成功");
                }
                else
                {
                    Console.WriteLine("选课失败");
                }
    
                Console.Read();
            }
        }
    
        // 外观类
        public class RegistrationFacade
        {
            private RegisterCourse registerCourse;
            private NotifyStudent notifyStu;
            public RegistrationFacade()
            {
                registerCourse = new RegisterCourse();
                notifyStu = new NotifyStudent();
            }
    
            public bool RegisterCourse(string courseName, string studentName)
            {
                if (!registerCourse.CheckAvailable(courseName))
                {
                    return false;
                }
    
                return notifyStu.Notify(studentName);
            }
        }
    
        #region 子系统
        // 相当于子系统A
        public class RegisterCourse
        {
            public bool CheckAvailable(string courseName)
            {
                Console.WriteLine("正在验证课程 {0}是否人数已满", courseName);
                return true;
            }
        }
    
        // 相当于子系统B
        public class NotifyStudent
        {
            public bool Notify(string studentName)
            {
                Console.WriteLine("正在向{0}发生通知", studentName);
                return true;
            }
        }
        #endregion

     在以下情况下可以考虑使用外观模式:

    • 为一个复杂的子系统提供一个简单的接口
    • 提供子系统的独立性
    • 在层次化结构中,可以使用外观模式定义系统中每一层的入口。其中三层架构就是这样的一个例子
  • 相关阅读:
    用jQuery开发插件详解
    position:absolute和float会隐式的改变display类型
    链家H5项目总结
    jQuery中的选择器
    jqeury实现全选和反选
    $.extend(),与$.fn.extend() 讲解(一)
    mybatis用distinct进行查询的问题
    mybatis 动态Sql的模糊查询
    mysql
    @RequestParam和@PathVariable的区别
  • 原文地址:https://www.cnblogs.com/gaocong/p/6780332.html
Copyright © 2011-2022 走看看