设计模式 - 外观模式

蔚落 2022-05-31 05:54 399阅读 0赞

设计模式 - 外观模式

场景

小张搬家了,新的房间都是智能化,但是每个设备都是独立的,小张每次回家之前需要打开app分别打开每个设备,例如小张回家后的基本操作是开门,打开电灯,把书从书架拿下来放到桌子上然后自动翻到昨日读到页码。这三个三个操作,小张需要分别操作三次,作为程序员小张觉得这个太不自动化了。他想把这三个变成一件事情而不是三件事。

小张想自己应该封装一下,把三个步骤变成一个操作。

外观模式

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

uml类图

!

book类

  1. package xuelongjiang.designpartten.facade;
  2. /** * @Author xuelongjiang */
  3. public class Book {
  4. public void watch(){
  5. System.out.println("从书架拿书");
  6. }
  7. public void over(){
  8. System.out.println("把书放回书架");
  9. }
  10. }

Light类

  1. package xuelongjiang.designpartten.facade;
  2. /** * @Author xuelongjiang */
  3. public class Light {
  4. public void on(){
  5. System.out.println("开灯");
  6. }
  7. public void off(){
  8. System.out.println("关灯");
  9. }
  10. }

door类

  1. package xuelongjiang.designpartten.facade;
  2. /** * @Author xuelongjiang */
  3. public class Door {
  4. public void on(){
  5. System.out.println("开门");
  6. }
  7. public void off(){
  8. System.out.println("关门");
  9. }
  10. }

外观类

  1. package xuelongjiang.designpartten.facade;
  2. /** * * 外观模式: 提供子系统一个简化的接口 * * * @Author xuelongjiang */
  3. public class FacadePattern {
  4. private Book book;
  5. private Light light;
  6. private Door door;
  7. public FacadePattern(Book book, Light light, Door door) {
  8. this.book = book;
  9. this.light = light;
  10. this.door = door;
  11. }
  12. public void goHome(){
  13. door.on();
  14. light.on();
  15. book.watch();
  16. }
  17. public void goWork(){
  18. book.over();
  19. light.off();
  20. door.off();
  21. }
  22. }

测试类

  1. package xuelongjiang.designpartten.facade;
  2. /** * @Author xuelongjiang */
  3. public class FacadeTest {
  4. public static void main(String[] args) {
  5. Book book = new Book();
  6. Light light = new Light();
  7. Door door = new Door();
  8. FacadePattern facadePattern = new FacadePattern(book,light,door);
  9. facadePattern.goHome();
  10. System.out.println("-------------");
  11. facadePattern.goWork();
  12. }
  13. }

要点

  • 当需要简化并统一一个很大的接口或者一群很复杂的接口时,使用外观
  • 外观将客户从一个复杂的子系统中解耦(FacadeTest就是客户类)
  • 实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行
  • 你可以为一个子系统实现一个以上的外观

发表评论

表情:
评论列表 (有 0 条评论,399人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式 - 外观模式

    设计模式 - 外观模式 场景 小张搬家了,新的房间都是智能化,但是每个设备都是独立的,小张每次回家之前需要打开app分别打开每个设备,例如小张回家后的基本操作是开门

    相关 设计模式 - 外观模式

    定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。 通过将子系统中一系列的接口进行组合形成一个更高层的接口,这样客户

    相关 设计模式——外观模式

    本文主要是讲述结构型模式中一个比较常用的模式-外观模式,这个模式呢,有个最大的特点将细粒度的对象包装成粗粒度的对象,应用程序通过 访问这个外观对象,来完成细粒度对象的调用,外