HeadFirst设计模式之门面模式

一、

实现家庭影院

1.

 1 package headfirst.designpatterns.facade.hometheater;
 2
 3 public class HomeTheaterFacade {
 4     Amplifier amp;
 5     Tuner tuner;
 6     DvdPlayer dvd;
 7     CdPlayer cd;
 8     Projector projector;
 9     TheaterLights lights;
10     Screen screen;
11     PopcornPopper popper;
12
13     public HomeTheaterFacade(Amplifier amp,
14                  Tuner tuner,
15                  DvdPlayer dvd,
16                  CdPlayer cd,
17                  Projector projector,
18                  Screen screen,
19                  TheaterLights lights,
20                  PopcornPopper popper) {
21
22         this.amp = amp;
23         this.tuner = tuner;
24         this.dvd = dvd;
25         this.cd = cd;
26         this.projector = projector;
27         this.screen = screen;
28         this.lights = lights;
29         this.popper = popper;
30     }
31
32     public void watchMovie(String movie) {
33         System.out.println("Get ready to watch a movie...");
34         popper.on();
35         popper.pop();
36         lights.dim(10);
37         screen.down();
38         projector.on();
39         projector.wideScreenMode();
40         amp.on();
41         amp.setDvd(dvd);
42         amp.setSurroundSound();
43         amp.setVolume(5);
44         dvd.on();
45         dvd.play(movie);
46     }
47
48
49     public void endMovie() {
50         System.out.println("Shutting movie theater down...");
51         popper.off();
52         lights.on();
53         screen.up();
54         projector.off();
55         amp.off();
56         dvd.stop();
57         dvd.eject();
58         dvd.off();
59     }
60
61     public void listenToCd(String cdTitle) {
62         System.out.println("Get ready for an audiopile experence...");
63         lights.on();
64         amp.on();
65         amp.setVolume(5);
66         amp.setCd(cd);
67         amp.setStereoSound();
68         cd.on();
69         cd.play(cdTitle);
70     }
71
72     public void endCd() {
73         System.out.println("Shutting down CD...");
74         amp.off();
75         amp.setCd(cd);
76         cd.eject();
77         cd.off();
78     }
79
80     public void listenToRadio(double frequency) {
81         System.out.println("Tuning in the airwaves...");
82         tuner.on();
83         tuner.setFrequency(frequency);
84         amp.on();
85         amp.setVolume(5);
86         amp.setTuner(tuner);
87     }
88
89     public void endRadio() {
90         System.out.println("Shutting down the tuner...");
91         tuner.off();
92         amp.off();
93     }
94 }

2.

 1 package headfirst.designpatterns.facade.hometheater;
 2
 3 public class HomeTheaterTestDrive {
 4     public static void main(String[] args) {
 5         Amplifier amp = new Amplifier("Top-O-Line Amplifier");
 6         Tuner tuner = new Tuner("Top-O-Line AM/FM Tuner", amp);
 7         DvdPlayer dvd = new DvdPlayer("Top-O-Line DVD Player", amp);
 8         CdPlayer cd = new CdPlayer("Top-O-Line CD Player", amp);
 9         Projector projector = new Projector("Top-O-Line Projector", dvd);
10         TheaterLights lights = new TheaterLights("Theater Ceiling Lights");
11         Screen screen = new Screen("Theater Screen");
12         PopcornPopper popper = new PopcornPopper("Popcorn Popper");
13
14         HomeTheaterFacade homeTheater =
15                 new HomeTheaterFacade(amp, tuner, dvd, cd,
16                         projector, screen, lights, popper);
17
18         homeTheater.watchMovie("Raiders of the Lost Ark");
19         homeTheater.endMovie();
20     }
21 }

3.

 1 package headfirst.designpatterns.facade.hometheater;
 2
 3 public class Amplifier {
 4     String description;
 5     Tuner tuner;
 6     DvdPlayer dvd;
 7     CdPlayer cd;
 8
 9     public Amplifier(String description) {
10         this.description = description;
11     }
12
13     public void on() {
14         System.out.println(description + " on");
15     }
16
17     public void off() {
18         System.out.println(description + " off");
19     }
20
21     public void setStereoSound() {
22         System.out.println(description + " stereo mode on");
23     }
24
25     public void setSurroundSound() {
26         System.out.println(description + " surround sound on (5 speakers, 1 subwoofer)");
27     }
28
29     public void setVolume(int level) {
30         System.out.println(description + " setting volume to " + level);
31     }
32
33     public void setTuner(Tuner tuner) {
34         System.out.println(description + " setting tuner to " + dvd);
35         this.tuner = tuner;
36     }
37
38     public void setDvd(DvdPlayer dvd) {
39         System.out.println(description + " setting DVD player to " + dvd);
40         this.dvd = dvd;
41     }
42
43     public void setCd(CdPlayer cd) {
44         System.out.println(description + " setting CD player to " + cd);
45         this.cd = cd;
46     }
47
48     public String toString() {
49         return description;
50     }
51 }

4.

 1 package headfirst.designpatterns.facade.hometheater;
 2
 3 public class Tuner {
 4     String description;
 5     Amplifier amplifier;
 6     double frequency;
 7
 8     public Tuner(String description, Amplifier amplifier) {
 9         this.description = description;
10     }
11
12     public void on() {
13         System.out.println(description + " on");
14     }
15
16     public void off() {
17         System.out.println(description + " off");
18     }
19
20     public void setFrequency(double frequency) {
21         System.out.println(description + " setting frequency to " + frequency);
22         this.frequency = frequency;
23     }
24
25     public void setAm() {
26         System.out.println(description + " setting AM mode");
27     }
28
29     public void setFm() {
30         System.out.println(description + " setting FM mode");
31     }
32
33     public String toString() {
34         return description;
35     }
36 }
时间: 2024-10-13 10:33:13

HeadFirst设计模式之门面模式的相关文章

JS设计模式(门面模式)

<!--JS设计模式(门面模式)--> // 门面模式的概念:简化API接口 最经典的就是事件 // 做一件事情: 必须要调用2个函数分别是 a , b //案例:获得页面上多个元素并设置css样式 window.onload=function(){ setCss(["div1","div2","div3"],{ background:"blue", color:"#fff" }); } fun

HeadFirst 设计模式 04 工厂模式

除了 new 操作符之外, 还有更多创造对象的方法. 工厂处理创建对象的细节. 这么做的目的是为了抽象, 例如把创建比萨的代码包装进一个类, 当以后实现改变时, 只需修改这个类即可. 利用静态方法定义一个简单的工厂, 这是很常见的技巧, 被称作静态工厂. 所有工厂模式斗都用来封装对象的创建, javascript 也是一样. 工厂方法模式通过让子类决定该创建的对象是什么, 来达到将对象创建的过程封装的目的. 工厂模式定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实

设计模式之门面模式20170728

结构型设计模式之门面模式: 一.含义 门面模式也叫做外观模式,是一种比较常用的封装模式,其定义如下: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用. 通俗来说,门面模式注重"统一的对象",也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生.也就是说,门面对象是外界访问子系统内部的唯一通道. 二.代码说明 1.主要有两个角色 1)门面角色 客户端可以调用这个角色的方法.此角色知晓子系统的所有功能

【C++实现】HeadFirst设计模式之策略模式

策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. Head First设计模式中介绍策略模式时以Duck类作为例子,其中用flyBehavior和quackBehavior两个接口引用变量代表鸭子飞行和鸭子叫这两种行为,通过改变flyBehavior和quackBehavior来满足不同的Duck子类的不同行为,这样带来的好处就是可以在运行时改变Duck子类的行为.下面是我用C++改写的代码. //MyDuckMain.cpp #includ

设计模式之门面模式(facade)

1.定义 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式.要求一个子系统的外部与其内部的通讯必须通过一个统一的对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 2.通用类图 Facade门面角色:客户端可以调用这个角色的方法.此角色知晓子系统的所有功能和责任.一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去,也就是说该角色没有实际的业务逻辑,只是一个委托类. subsystem子系统角色:可以同时有一个或多个子系统.每个子系统都不

设计模式_Facade_门面模式

形象例子: 我有一个专业的Nikon相机,我就喜欢自己手动调光圈.快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会.幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整, 这样MM也可以用这个相机给我拍张照片了.门面模式: 外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用.每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式.但整个系统可以有多个门面类.

java设计模式之门面模式以及在java中作用

门面模式在Tomcat中有多处使用,在Request和Response对象封装,从ApplicationContext到ServletContext封装中都用到了这种设计模式. 一个系统可以有几个门面类 在门面模式中,通常只需要一个门面类,并且此门面类只有一个实例,换言之它是一个单例类.当然这并不意味着在整个系统里只有一个门面类,而仅仅是说对每一个子系统只有一个门面类.或者说,如果一个系统有好几个子系统的话,每一个子系统都有一个门面类,整个系统可以有数个门面类. 为子系统增加新行为 初学者往往以

设计模式之门面模式---Facade Pattern

模式的定义 门面模式(Facade Pattern)也叫做外观模式,定义如下: Provide a unified interface to a set of interfaces in a subsystem. Facade defines a highet-level interface that makes the subsystem easier to use. 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 类型 结构

设计模式_门面模式

Facade Pattern Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.(要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用) 为什么这也算一种设计模式? public interface