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
- FacadePattern-HeadFirst学习
- headfirst python 学习笔记
- headfirst学习网站
- 观察者模式-HeadFirst学习
- CompositePattern--HeadFirst学习
- IteratorPattern--HeadFirst学习
- StatePattern-HeadFirst学习
- 《HeadFirst JavaScript》学习笔记
- 设计模式(Headfirst)学习
- headfirst学习笔记/命令模式
- 抽象工厂模式--HeadFirst学习
- 单例模式-HeadFirst学习
- Command设计模式-HeadFirst学习
- Adapter设计模式-HeadFirst学习
- MVC设计模式--HeadFirst学习
- HeadFirst设计模式学习笔记
- HeadFirst
- 外观模式 FacadePattern
- Enable Oracle NUMA support with Oracle Server Version 11gR2 (文档 ID 864633.1)
- 在Ubuntu上部署Hadoop单节点
- up casting down casting
- 蓝懿 iOS 技术交流和心得分享 12.1
- PMON failed to acquire latch, see PMON dump
- FacadePattern-HeadFirst学习
- java对redis的基本操作
- 使用safari对webview进行调试
- directx9程序中遇到的第一个问题 error2061 __RPC__out_xcount_part
- IOS UITableView (二)
- android Media Playerback(2)
- 将内容布局延伸到状态栏,让应用实现真正的沉浸式
- vim配置文件(无插件依赖)
- windows android sdk 6.0 +ADT+eclipse 开发环境搭建