你的位置:首页 > ASP.net教程

[ASP.net教程]《Head First设计模式》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();    }  }

输出结果: