headfirst设计模式之门面模式

shamgod      2022-02-08     254

关键词:

一、

实现家庭影院

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 }

 

设计模式之门面模式20170728

结构型设计模式之门面模式:一、含义门面模式也叫做外观模式,是一种比较常用的封装模式,其定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更... 查看详情

headfirst设计模式之策略模式

策略模式(strategypattern):定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.设计原则一找出应用中需要变化之处,把它们独立出来、不要和那些不需要变化的代码混在一起 设计... 查看详情

headfirst设计模式之单件模式(singletonpattern)(代码片段)

 1.   单件模式的经典实现publicclassSingletonprivatestaticSingletonuniqueInstance;privateSingleton()publicstaticSingletonGetInstance()if(uniqueInstance==null)uniqueInstance=newSingleton();returnuniq 查看详情

设置模式之-门面模式-心得随笔

...方法封装到一个方法中,方便使用接口的人调用,这就是门面模式也可以是完成一个功能需要调用很多接口,然后把这些接口再封一层,封成一个接口,对外暴露  查看详情

gof23种设计模式之门面模式和装饰器模式

查看详情

headfirst设计模式之原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他... 查看详情

headfirst设计模式之代理模式

一、定义定义:为其他对象提供一种代理以控制对这个对象的访问在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。二、结构代理模式一般会有三个角色:  抽象角色(Subject):指代理角色和真实角色对... 查看详情

headfirst设计模式之组合模式

一、定义将对象组合成树形结构来表现"整体-部分"层次结构。组合能让客户以一致的方法处理个别对象以及组合对象。主要部分可以被一致对待问题.在使用组合模式中需要注意一点也是组合模式最关键的地方:叶子对象和组合... 查看详情

《headfirst设计模式》之工厂模式

工厂模式(Factory)依赖倒置原则(DependencyInversionPrinciple):依赖抽象,不要依赖具体类。变量不可以持有具体类的引用。(如果使用new,就会持有具体类的引用。可以改用工厂来避开这样的做法。)不要让类派生自具体类。(如... 查看详情

《headfirst设计模式》之代理模式

代理模式(Proxy):控制对象访问  ——为另一个对象提供一个替身或占位符来访问这个对象。要点:代理模式有许多变体,如:缓存代理、同步代理、防火墙代理和写入时复制代理代理在结构上类似装饰者,但目的不同。装... 查看详情

headfirst设计模式之桥接模式

一、定义桥接模式(BridgePattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化。主要解决:在多维可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角... 查看详情

headfirst设计模式之适配器模式与外观模式

HeadFirst设计模式之适配器模式与外观模式前言:之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西。这样就可以在设计中将类的接口转化为... 查看详情

结构性设计模式之门面模式(代码片段)

@TOC门面模式概述应用场景为复杂的模块或子系统提供外界访问的模块。子系统相对独立。预防额外操作带来的风险。目的优缺点优点:减少系统相互依赖。提高灵活性。提高安全性。缺点:不符合开闭原则,如果要改东西很麻... 查看详情

headfirst设计模式之状态模式

一、定义定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。何时使用:代码中包含大量与对象状... 查看详情

delphi设计模式:《headfirst设计模式》delphi7代码---工厂模式之简单工厂

简单工厂:工厂依据传进的参数创建相应的产品。http://www.cnblogs.com/DelphiDesignPatterns/archive/2009/07/24/1530536.html{《HeadFirst设计模式》工厂模式之简单工厂}3{产品类}4{编译工具:Delphi7.0}5{联系方式:[email protected]com}67unituProducts;89int 查看详情

headfirst设计模式之外观模式

一、定义外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。外观模式不只是简化了接口,也将客户从组件的子系统中解耦。外观和适配器可以包装许多类,但是外... 查看详情

常用设计模式之门面模式

门面模式也可以叫做外观模式 为子系统或者模块中的一组接口提供一个一致的访问方式,此模式定义了一个高层接口,这个接口使得各个子系统/模块中的功能 更加容易使用。 实际应用中,我们在对付一些老旧的代码或者即便... 查看详情

java设计模式之外观模式(门面模式)

...并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 二、角色及使用场景  简单来说,该模... 查看详情