文章出處

/// <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

 在以下情況下可以考慮使用外觀模式:

  • 為一個復雜的子系統提供一個簡單的接口
  • 提供子系統的獨立性
  • 在層次化結構中,可以使用外觀模式定義系統中每一層的入口。其中三層架構就是這樣的一個例子

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()