`
wangpx
  • 浏览: 202333 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Facade patten 读书笔记

阅读更多
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

1。当需要使用一个现有的类而其接口并不符合你的需求时,就使用适配器。
2。当需要简化并统一一个个很大的接口或者一群复杂的接口时,就使用外观。
3。适配器改变接口以符合客户的期望。
4。外观将客户从一个复杂的子系统中解耦。
5。实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定。
6。实现一个外观,需要将子系统组合进外观众,然后将工作委托给子系统执行。
7。适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多重继承。
8。你可以为一个子系统实现一个以上的外观。
9。适配器将一个对象包装起来以改变其接口:装饰者将一个对象包装起来以增加新的行为和责任,而外观将一群对象包装起来以便简化其接口。

package pattern;
public class HomeTheaterFacade {
 Amplifler amp = new Amplifler();
 Tuner tuner = new Tuner();
 DvdPlayer dvd = new DvdPlayer();
 CdPlayer cdPlayer = new CdPlayer();
 Projector projector = new Projector();
 TheaterLights lights = new TheaterLights();
 PopcomPopper popper = new PopcomPopper();
 Screen screen = new Screen();
 public HomeTheaterFacade(Amplifler amp, Tuner tuner, DvdPlayer dvd,
   CdPlayer cdPlayer, Projector projector, TheaterLights lights,
   PopcomPopper popper, Screen screen) {
  amp = amp;
  tuner = tuner;
  dvd = dvd;
  cdPlayer = cdPlayer;
  projector = projector;
  lights = lights;
  popper = popper;
  screen = screen;
 }
 public void WatchMovie(String movie) {
  System.out.println("Get ready to watch a movie ....");
  popper.on();
  popper.pop();
  lights.dim(10);
  screen.down();
  projector.on();
  projector.wideScreenMode();
  amp.on();
  amp.setDvd(dvd);
  amp.setSurroundSoud();
  amp.setVolume(5);
  dvd.on();
  dvd.play(movie);
 }
 public void EndMovie(String movie) {
  System.out.println("Shutting movie theater down ....");
  popper.off();
  lights.on();
  screen.up();
  projector.off();
  amp.off();
  dvd.stop();
  dvd.eject();
 }
}
class Amplifler {
 Tuner tuner;
 DvdPlayer dvdPlayer;
 CdPlayer cdPlayer;
 public void on() {
  System.out.println(" Amplifler on");
 }
 public void off() {
  System.out.println(" Amplifler off");
 }
 public void setCd(CdPlayer cdPlayer) {
  cdPlayer = cdPlayer;
 }
 public void setDvd(DvdPlayer dvdPlayer) {
  dvdPlayer = dvdPlayer;
 }
 public void setSurroundSoud() {
  System.out.println("Amplifler setSurroundSoud");
 }
 public void setTuner(Tuner tuner) {
  tuner = tuner;
 }
 public void setVolume(int vol) {
  System.out.println("Amplifler setVolume " + vol);
 }
 public String toString() {
  return "Amplifler";
 }
}
class Tuner {
 public void on() {
  System.out.println(" Tuner on");
 }
 public void off() {
  System.out.println(" Tuner off");
 }
 public void setAm() {
  System.out.println("Tuner setAm");
 }
 public void setFm() {
  System.out.println("Tuner setFm");
 }
 public void setFrequency() {
  System.out.println("Tuner setFrequency");
 }
 public String toString() {
  return "Tuner";
 }
}
class DvdPlayer {
 public void on() {
  System.out.println(" DvdPlayer on");
 }
 public void off() {
  System.out.println(" DvdPlayer off");
 }
 public void eject() {
  System.out.println(" DvdPlayer eject");
 }
 public void pause() {
  System.out.println(" DvdPlayer pause");
 }
 public void play(String movie) {
  System.out.println(" DvdPlayer play " + movie);
 }
 public void setSurroundAudio() {
  System.out.println(" DvdPlayer setSurroundAudio");
 }
 public void setTwoChannelAudio() {
  System.out.println(" DvdPlayer setTwoChannelAudio");
 }
 public void stop() {
  System.out.println(" DvdPlayer stop");
 }
}
class Screen {
 public void up() {
  System.out.println(" Screen up");
 }
 public void down() {
  System.out.println(" Screen down");
 }
 public String toString() {
  return "screen";
 }
}
class CdPlayer {
 public void on() {
  System.out.println(" CdPlayer on");
 }
 public void off() {
  System.out.println(" CdPlayer off");
 }
 public void eject() {
  System.out.println(" CdPlayer eject");
 }
 public void pause() {
  System.out.println(" CdPlayer pause");
 }
 public void play() {
  System.out.println(" CdPlayer play");
 }
 public void stop() {
  System.out.println(" CdPlayer stop");
 }
 public String toString() {
  return "CdPlayer";
 }
}
class Projector {
 DvdPlayer dvdPlayer;
 public void on() {
  System.out.println(" Projector on");
 }
 public void off() {
  System.out.println(" Projector off");
 }
 public void tvMode() {
  System.out.println(" Projector tvMode");
 }
 public void wideScreenMode() {
  System.out.println(" Projector wideScreenMode");
 }
 public String toString() {
  return "Projector";
 }
}
class PopcomPopper {
 public void on() {
  System.out.println(" PopcomPopper on");
 }
 public void off() {
  System.out.println(" PopcomPopper off");
 }
 public void pop() {
  System.out.println(" PopcomPopper pop");
 }
 public String toString() {
  return "PopcomPopper";
 }
}
class TheaterLights {
 public void on() {
  System.out.println(" TheaterLights on");
 }
 public void off() {
  System.out.println(" TheaterLights off");
 }
 public void dim(int dim) {
  System.out.println(" TheaterLights dim " + dim);
 }
 public String toString() {
  return "TheaterLights";
 }
}
 
package pattern;
public class HomeTheaterTestDrive {
 /**
  * @param args
  */
 public static void main(String[] args) {
  Amplifler amp = new Amplifler();
  Tuner tuner = new Tuner();
  DvdPlayer dvd = new DvdPlayer();
  CdPlayer cdPlayer = new CdPlayer();
  Projector projector = new Projector();
  TheaterLights lights = new TheaterLights();
  PopcomPopper popper = new PopcomPopper();
  Screen screen = new Screen();
  HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp, tuner, dvd,
    cdPlayer, projector, lights, popper, screen);
  homeTheater.WatchMovie("TMD");
  homeTheater.EndMovie("TMD");
 }
}

分享到:
评论

相关推荐

    良葛格DesignPattern学习笔记

    良葛格的《Design Pattern学习笔记》不仅涵盖了经典的GOF设计模式,还额外介绍了几种多线程模式,这使得这份学习笔记成为了一个宝贵的学习资源。下面将对其中的部分设计模式进行详细介绍。 #### 二、GOF设计模式 ...

    java源码解读-DesignPattern:Android源码设计模式解析与实战读书笔记源代码

    Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...

    Gof design pattern 中文/英文版+web+学习笔记

    23. **门面模式(Facade)**:为子系统提供一个一致的界面,它定义了一个高层接口,使得子系统更加容易使用。 通过学习Gof设计模式,开发者可以更好地理解和设计复杂的软件系统,提高代码的可读性、可维护性和复用...

    300Java设计模式部分学习笔记

    6. 外观模式(Facade Pattern):为子系统中的一组接口提供一个统一的界面。 7. 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。 行为型模式: 行为型模式关注的是对象之间的通信,用来...

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    设计模式整理代码-pattern.zip

    - 外观模式(Facade):为子系统提供一个统一的接口,使得子系统的复杂性对客户透明。 - 适配器模式(Adapter):使两个不兼容的接口能够协同工作。 - 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以...

    谷歌师兄的leetcode刷题笔记-JavaNote:javaesguavajdkjdk8jsonlombokmdthreadjvmsprin

    谷歌师兄的leetcode刷题笔记 请叫我大师兄 Java Note Project 项目结构目录 bean 统一存放一些测试使用的model的bean,enum... 设计模式 简要说明 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码...

    设计模式笔记总结 含C#示例代码 复习好帮手

    ### 设计模式笔记总结 本篇文章是对一份设计模式学习资料的深入解读,这份资料包含了19种经典的设计模式,并提供了C#示例代码,适用于学习和复习。下面将逐一介绍这些设计模式及其核心概念。 #### 1. 简单工厂模式...

    笔记30-JAVAEE之SpringBoot的日志

    4. **门面模式(Facade Pattern):** 门面模式是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统的一组接口。在示例中,`LightFacade`类就是门面,它隐藏了`LivingRoomLight`、`HallLight`和`...

    DesignPattern:设计模式的学习笔记和示例代码

    设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的经验总结。...在DesignPattern-master这个压缩包中,你可以找到关于这些模式的详细讲解和实例代码,为你的Java开发之旅提供宝贵的参考资料。

    23中设计模式学习笔记.docx

    ### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...

    java设计模式之外观模式学习笔记

    外观模式(Facade Pattern)是一种设计模式,主要用于简化子系统或组件的使用,提供一个统一的接口,使得客户端不必关心复杂的内部实现,降低了系统的耦合度。在Java设计模式中,外观模式扮演着重要角色,它使得系统...

Global site tag (gtag.js) - Google Analytics