设计模式C#实现(三)——外观模式

外观模式——提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口让子系统更容易使用。

  

  一个外观包含了为许多对象和对他们的操作,使得重复这些操作更方便。

  假如客厅里有灯(Lights)

  

class Lights
    {
        public void on()
        {
            Console.WriteLine("Lights on");
        }
        public void off()
        {
            Console.WriteLine("Lights off");
        }
    }

  电视(TV)

  

class TV
    {
        public void on()
        {
            Console.WriteLine("TV on");
        }
        public void off()
        {
            Console.WriteLine("TV off");
        }
    }

 

  和光盘播放器(DVDplaer)

  

class DvdPlayer
    {
        public void on()
        {
            Console.WriteLine("DVD player on.");
        }
        public void off()
        {
            Console.WriteLine("DVD player off");
        }
        public void play()
        {
            Console.WriteLine("Start playing");
        }
        public void end()
        {
            Console.WriteLine("End End playing");
        }
    }

   可以定义一个外观——影院模式,影院模式提供开始看电影和结束电影两个方法,分别对应一系列的操作。

 class Facade
    {
        TV tv;
        DvdPlayer dvd;
        Lights lights;

        public Facade(TV tv, DvdPlayer dvd, Lights lights)
        {
            this.tv = tv;
            this.dvd = dvd;
            this.lights = lights;
        }
        public void watchMovie()
        {
            Console.WriteLine("Get ready to watch a movie");
            lights.off();
            tv.on();
            dvd.on();
            dvd.play();
        }
        public void endMovie()
        {
            Console.WriteLine("\nShutting movie theater down..");
            lights.on();
            dvd.end();
            dvd.off();
            tv.off();
        }
    }

   这样就有了方便的一键影院模式,而不用每次都'亲自'操作各种设备。

class Program
    {
        static void Main(string[] args)
        {
            TV tv = new TV();
            DvdPlayer dvd = new DvdPlayer();
            Lights lights = new Lights();
            Facade facade = new Facade(tv,dvd,lights);
            facade.watchMovie();
            facade.endMovie();
            Console.ReadKey();
        }

    }

输出结果:

posted @ 2015-08-21 10:01  妖刀Dreamcast  阅读(263)  评论(0编辑  收藏  举报