• HeadFirst设计模式之门面模式


    一、

    1.The Facade Pattern provides a unifi ed interface to a set of interfaces in a subsytem. Facade defi nes a higher-level interface that makes the subsystem easier to use.

    2.Facades and adapters may wrap multiple classes, but a facade’s intent is to simplify, while an adapter’s is to convert

    the interface to something different.

    3.

    4.

    二、

    实现家庭影院

    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 }
  • 相关阅读:
    科普 | 验证码有什么用?
    验证码是什么?有什么作用?(风控必看)
    银保监会提示信用卡逾期风险 简析“以卡养卡”背后的三个原因
    微信、电商、机票、抖音上的黑灰产“生意”
    假“信用卡”坑用户害商家 如何帮助银行构建反欺诈模型
    “羊毛党”们最喜欢用的手机号码分析
    是贫穷限制了想象力?双11黑产薅一天可吃一年,史上最强反羊毛党科普
    一场直播成交过亿?揭开数字背后的猫腻
    关联网络的特点有哪些?
    “双十一”购物节 电商平台面临的五大业务风险
  • 原文地址:https://www.cnblogs.com/shamgod/p/5258860.html
Copyright © 2020-2023  润新知