FacadePattern-HeadFirst学习

来源:互联网 发布:qt x11中文不显示linux 编辑:程序博客网 时间:2024/06/06 01:24

1、外观模式定义

提供了一个统一的接口,用来访问子系统中的一群接口,让子系统更容易使用。

2、要点

当需要用到一个现有的类而其接口不符合你的需要时,就使用适配器模式

当需要简化并统一一个很大的接口或一群复杂的接口时,使用外观模式

适配器改变接口以符合客户的期望

外观将客户从一个复杂的子系统中解耦

实现一个适配器可能需要一番功夫,也可能不费工夫,视目标接口的大小和复杂程度实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行

适配器模式有两种模式,对象适配器和类适配器,类适配器需要用到多重jicheng

可以为一个子系统实现一个以上的外观

适配器将一个对象包装起来以改变其接口,装饰者将一个对象包装起来以增加新的职责,而外观是将一群对象包装起来以简化其接口

3、例子代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace FacadePattern{    /// <summary>    /// 功放    /// </summary>    public class Tuner    {        public void on()        {            Console.WriteLine("Tuner_On");        }        public void off()        {            Console.WriteLine("Tuner_Off");        }    }    /// <summary>    /// DVD播放器    /// </summary>    public class DVDPlayer    {        public void on()        {            Console.WriteLine("DVDPlayer_On");        }        public void play()        {            Console.WriteLine("DVDPlayer_play");        }        public void off()        {            Console.WriteLine("DVDPlayer_Off");        }    }    /// <summary>    /// CD播放器    /// </summary>    public class CDPlayer    {        public void on()        {            Console.WriteLine("CDPlayer_On");        }        public void play()        {            Console.WriteLine("CDPlayer_play");        }        public void off()        {            Console.WriteLine("CDPlayer_Off");        }    }    /// <summary>    /// 投影仪    /// </summary>    public class Projector    {        public void on()        {            Console.WriteLine("Projector_On");        }        public void off()        {            Console.WriteLine("Projector_Off");        }    }    /// <summary>    /// 灯光    /// </summary>    public class TheaterLights    {        public void on()        {            Console.WriteLine("TheaterLights_On");        }        public void off()        {            Console.WriteLine("TheaterLights_Off");        }    }    /// <summary>    /// 屏幕    /// </summary>    public class Screen    {        public void up()        {            Console.WriteLine("Screen_Up");        }        public void down()        {            Console.WriteLine("Screen_Down");        }    }    /// <summary>    /// 爆米花机    /// </summary>    public class PopCornPopper    {        public void on()        {            Console.WriteLine("PopCornPopper_On");        }        public void pop()        {            Console.WriteLine("PopCornPopper_Pop");        }        public void off()        {            Console.WriteLine("PopCornPopper_Off");        }    }    public class Amplifier    {        public void on()        {            Console.WriteLine("Amplifier_On");        }        public void off()        {            Console.WriteLine("Amplifier_Off");        }        public void setDVD()        {            Console.WriteLine("Amplifier_setDVD");        }        public void setCD()        {            Console.WriteLine("Amplifier_setCD");        }        public void setTuner()        {            Console.WriteLine("Amplifier_setTuner");        }    }    /// <summary>    /// 家庭影院    /// </summary>    public class HomeTheaterFacade    {        private Amplifier m_Amplifier;        private Tuner m_Tuner;        private DVDPlayer m_DVDPlayer;        private CDPlayer m_CDPlayer;        private Projector m_Projector;        private TheaterLights m_Lights;        private Screen m_Screen;        private PopCornPopper m_PopCorn;        public HomeTheaterFacade(Amplifier m_Amplifier, Tuner m_Tuner, DVDPlayer m_DVDPlayer, CDPlayer m_CDPlayer, Projector m_Projector,            TheaterLights m_Lights, Screen m_Screen, PopCornPopper m_PopCorn)        {            this.m_Amplifier = m_Amplifier;            this.m_CDPlayer = m_CDPlayer;            this.m_DVDPlayer = m_DVDPlayer;            this.m_Lights = m_Lights;            this.m_PopCorn = m_PopCorn;            this.m_Projector = m_Projector;            this.m_Screen = m_Screen;            this.m_Tuner = m_Tuner;        }        public void WatchMovie()        {            Console.WriteLine("Ready to Watch movie");            m_PopCorn.on();            m_PopCorn.pop();            m_Lights.off();            m_Screen.down();            m_Projector.on();            m_Amplifier.on();            m_Amplifier.setDVD();            m_DVDPlayer.on();            m_DVDPlayer.play();        }        public void EndMovie()        {            Console.WriteLine("shutting down movie");            m_PopCorn.off();            m_Lights.on();            m_Screen.up();            m_Projector.off();            m_Amplifier.off();            m_DVDPlayer.off();        }    }}

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace FacadePattern{    class Program    {        static void Main(string[] args)        {            HomeTheaterFacade pHomeTheaterFacade = new HomeTheaterFacade                (new Amplifier(), new Tuner(), new DVDPlayer(), new CDPlayer(), new Projector(),                new TheaterLights(), new Screen(), new PopCornPopper());            pHomeTheaterFacade.WatchMovie();            pHomeTheaterFacade.EndMovie();        }    }}

4、主要类图


0 0
原创粉丝点击