• 9 外观模式(Facade)


    外观模式是为了解决类与类之间的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,看下类图:(我们以一个计算机的启动过程为例)

     
     
     
    1. package com.liubo.patterns.facade;
      /**
       * 
       * @author liubo
       *
       */
      public class CPU {
      	public void startup() {
      		System.out.println("cpu startup");
      	}
      	public void shutdown() {
      		System.out.println("cpu shutdown");
      	}
      }
      

        


    1. package com.liubo.patterns.facade;
      /**
       * @author liubo
       *
       */
      public class Memory {
      	public void startup() {
      		System.out.println("memory startup");
      	}
      	public void shutdown() {
      		System.out.println("memory shutdown");
      	}
      }
      

        

    2. package com.liubo.patterns.facade;
      /**
       * @author liubo
       *
       */
      public class Disk {
      	public void startup() {
      		System.out.println("disk startup");
      	}
      	public void shutdown() {
      		System.out.println("disk shutdown");
      	}
      }
      

        

      /**
       * 
       */
      package com.liubo.patterns.facade;
      /**
       * @author liubo
       *
       */
      public class Computer {
      	private CPU cpu;
      	private Memory memory;
      	private Disk disk;
      	/**
      	 * @param cpu
      	 * @param memory
      	 * @param disk
      	 */
      	public Computer() {
      		this.cpu = new CPU();
      		this.memory = new Memory();
      		this.disk = new Disk();
      	}
      	public void startup() {
      		System.out.println("start the computer");
      		cpu.startup();
      		memory.startup();
      		disk.startup();
      		System.out.println("start computer finished");
      	}
      	public void shutdown() {
      		System.out.println("begin to shutdown");
      		cpu.shutdown();
      		memory.shutdown();
      		disk.shutdown();
      		System.out.println("computer closed");
      	}
      

        

      /**
       * 
       */
      package com.liubo.patterns.facade;
      /**
       * @author liubo
       *
       */
      public class Computer {
      	private CPU cpu;
      	private Memory memory;
      	private Disk disk;
      	/**
      	 * @param cpu
      	 * @param memory
      	 * @param disk
      	 */
      	public Computer() {
      		this.cpu = new CPU();
      		this.memory = new Memory();
      		this.disk = new Disk();
      	}
      	public void startup() {
      		System.out.println("start the computer");
      		cpu.startup();
      		memory.startup();
      		disk.startup();
      		System.out.println("start computer finished");
      	}
      	public void shutdown() {
      		System.out.println("begin to shutdown");
      		cpu.shutdown();
      		memory.shutdown();
      		disk.shutdown();
      		System.out.println("computer closed");
      	}
      

        


     
    //output
    start the computer
    cpu startup
    memory startup
    disk startup
    start computer finished
    begin to shutdown
    cpu shutdown
    memory shutdown
    disk shutdown
    computer closed
     
    如果我们没有Computer类,那么,CPU、Memory、Disk他们之间将会相互持有实例,产生关系,这样会造成严重的依赖,修改一个类,可能会带来其他类的修改,这不是我们想要看到的,有了Computer类,他们之间的关系被放在了Computer类里,这样就起到了解耦的作用,这,就是外观模式!





  • 相关阅读:
    js关闭窗口
    利用DotNetZip服务端压缩文件并下载
    .net 文件下载
    js在一定时间内跳转页面及各种页面刷新
    hosts 配置
    js判断字段是否为空 isNull
    js enter键激发事件
    解决iframe在移动端(主要iPhone)上的问题
    17年年终总结——走过2017,迎来2018Flag
    Node.js系列-express(上)
  • 原文地址:https://www.cnblogs.com/liubo6/p/4563429.html
Copyright © 2020-2023  润新知