• 设计模式之七:外观模式(家庭影院)


    外观模式(facade):提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

    设计原则---"最少知识"原则:只和你的密友谈话。

    原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。

    方针:就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:

    1)该对象本身;

    2)被当做方法的参数而传递进来的对象;

    3)此方法所创建或实例化的任何对象;

    4)对象的任何组件。

    public float getTemp(){ //这个方法耦合了一个类

      return station.getThermometer().getTemperature();

    }

     1 package com.jyu.test;
     2 
     3 /**
     4  * 这是一个汽车类,展示调用方法的各种做法,同时还能够遵守“最少知识”原则。
     5  * @author JRSmith
     6  *
     7  */
     8 public class Car {
     9 
    10     Engine engine;//这是类的一个组件我们能调用它的方法。
    11     
    12     public Car(){
    13         //初始化发动机
    14     }
    15     
    16     public void start(Key key) {//被当做参数传进来的对象,其方法可以被调用。
    17         Doors doors = new Doors();//在这里创建一个新的对象,它的方法可以被调用。
    18         
    19         boolean authorized = key.turns();
    20         
    21         if(authrized) {
    22             engine.start();//可以调用对象组件的方法。
    23             updateDashboardDisplay();//可以调用同一个对象内的本地方法。
    24             doors.lock();//可以调用你所创建或实例化对象的方法。
    25         }
    26     }
    27     public void updateDashboardDisplay(){
    28         //更新显示
    29     }
    30 }

     项目名:Facade  下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx  Facade.zip

     1 package com.jyu.equipment;
     2 
     3 /**
     4  * 屏幕
     5  * @author JRSmith
     6  *
     7  */
     8 public class Screen {
     9 
    10     public void down() {
    11         System.out.println("The screen is down...");
    12     }
    13     
    14     public void up() {
    15         System.out.println("The screen is up...");
    16     }
    17 }
     1 package com.jyu.homethreaterfacade;
     2 
     3 import com.jyu.equipment.Amplifier;
     4 import com.jyu.equipment.DvdPlayer;
     5 import com.jyu.equipment.PopcornPopper;
     6 import com.jyu.equipment.Projector;
     7 import com.jyu.equipment.Screen;
     8 import com.jyu.equipment.ThreaterLights;
     9 /**
    10  * 家庭影院
    11  * @author JRSmith
    12  *
    13  */
    14 public class HomeThreaterFacade {
    15 
    16     Amplifier amp;
    17     DvdPlayer dvd;
    18     Projector projector;
    19     ThreaterLights lights;
    20     Screen screen;
    21     PopcornPopper popper;
    22     
    23     public HomeThreaterFacade(Amplifier amp, DvdPlayer dvd, Projector projector, ThreaterLights lights,
    24     Screen screen,PopcornPopper popper) {
    25         this.amp = amp;
    26         this.dvd = dvd;
    27         this.projector = projector;
    28         this.lights = lights;
    29         this.screen = screen;
    30         this.popper = popper;
    31     }
    32 
    33     /**看电影*/
    34     public void watchMovie(String movie) {
    35         System.out.println("Get ready to watch to watch a movie...");
    36         
    37         popper.on();
    38         popper.pop();
    39         lights.dim(10);
    40         screen.down();
    41         projector.on();
    42         projector.wideScreenMode();
    43         amp.on();
    44         amp.setDvd(dvd);
    45         amp.setVolume(5);
    46         dvd.on();
    47         dvd.play(movie);
    48     }
    49     
    50     /**结束观看电影模式*/
    51     public void endMovie() {
    52         System.out.println("Shuting movie theater down...");
    53         popper.off();
    54         lights.off();
    55         screen.up();
    56         projector.off();
    57         amp.off();
    58         dvd.stop();
    59         dvd.eject();
    60         dvd.off();
    61     }
    62 }
     1 package com.jyu.test;
     2 
     3 import com.jyu.equipment.Amplifier;
     4 import com.jyu.equipment.DvdPlayer;
     5 import com.jyu.equipment.PopcornPopper;
     6 import com.jyu.equipment.Projector;
     7 import com.jyu.equipment.Screen;
     8 import com.jyu.equipment.ThreaterLights;
     9 import com.jyu.homethreaterfacade.HomeThreaterFacade;
    10 
    11 public class HomeTheaterTestDrive {
    12     
    13     public static void main(String[] args) {
    14         Amplifier amp = new Amplifier();
    15         DvdPlayer dvd = new DvdPlayer();
    16         Projector projector = new Projector();
    17         ThreaterLights lights = new ThreaterLights();
    18         Screen screen = new Screen();
    19         PopcornPopper popper = new PopcornPopper();
    20         
    21         HomeThreaterFacade homeTheater = new HomeThreaterFacade(amp, dvd, projector, lights, screen, popper);
    22         
    23         homeTheater.watchMovie("Raiders of the Lost Ark");
    24         System.out.println("---------------movie ends-----------------");
    25         homeTheater.endMovie();
    26     }
    27 
    28 }
  • 相关阅读:
    转发:招聘一个靠谱的 iOS
    转发:经典面试题
    APP上架证书无效:解决
    转发:Xcode插件
    Alcatraz:插件管理
    类似禅道的多条件搜索功能,比如或者并且和模糊查询和指定查询,见下图吧
    关于angularjs中,数据模型被改变,页面不刷新的解决办法
    angluar1+ionic详情页返回在原来的位置(缓存数据和页面高度)
    unable to resolve module react-native-gesture-handler from
    解决React Native:Error: Cannot find module 'asap/raw'
  • 原文地址:https://www.cnblogs.com/damonhuang/p/2711667.html
Copyright © 2020-2023  润新知