zoukankan      html  css  js  c++  java
  • 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类里,这样就起到了解耦的作用,这,就是外观模式!





  • 相关阅读:
    linux sed的使用
    linux 服务的操作
    Js apply方法详解,及其apply()方法的妙用
    call()方法和apply()方法
    javascript中的深拷贝和浅拷贝
    移动web适配利器-rem
    js 函数讲解
    try…catch 结构
    Git使用之(pathspec master did not match any file(s) known to git)
    微信小程序使用函数的三种方法
  • 原文地址:https://www.cnblogs.com/liubo6/p/4563429.html
Copyright © 2011-2022 走看看