设计模式(7)----外观模式

  1. 简介:
    1. 软件开发过程中,客户端经常与复杂的系统内部的子系统进行耦合,从而导致客户单程序随着子系统的变化而变化,为了将他们解耦而产生是外观模式,也称作门面模式
  2. 定义:
    1. 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
  3. 组成:
    1. façade:这个外观类为子类提供一个共同的对外接口
    2. Client:客户对象通过一个外观接口读写子系统中各个接口的数据资源
  4. 示例情景:
    1. 一个电脑的开机与关机,电脑开机,需要先提供电力,然后内存启动,cpu启动,最后电脑启动,电脑关闭,需要先cpu关闭,然后内存关闭,最后电力关闭,使用外观模式来模拟编程实现。
  5. 步骤:
    1. 定义一个外观类ComputerFacade

package com.lvsling.facade;

public class ComputerFacade {

private CPU cpu;

private Memory memory;

private Power power;

public ComputerFacade(){

cpu = new CPU();

memory = new Memory();

power = new Power();

}

public void startup(){

power.startup();

memory.startup();

cpu.startup();

}

public void run(){

System.out.println("---------------");

System.out.println("computer run...");

System.out.println("---------------");

}

public void shutdown(){

cpu.shutdown();

memory.shutdown();

power.shutdown();

}

}

 

  1. 定义一个子系统类Power

     

package com.lvsling.facade;

public class Power {

public void startup(){

System.out.println("Power start...");

}

public void shutdown(){

System.out.println("Power shutdown...");

}

}

 

  1. 定义一个子系统类Memory

     

package com.lvsling.facade;

public class Memory {

public void startup(){

System.out.println("Memory start...");

}

public void shutdown(){

System.out.println("Memory shutdown...");

}

}

 

  1. 定义一个子系统类CPU

     

package com.lvsling.facade;

public class CPU {

public void startup(){

System.out.println("CPU start...");

}

public void shutdown(){

System.out.println("CPU shutdown...");

}

}

 

  1. 定义一个客户端类Client

     

package com.lvsling.facade;

public class Client {

    public static void main(String[] args) {

        ComputerFacade computerFacade = new ComputerFacade();

computerFacade.startup();

computerFacade.run();

computerFacade.shutdown();

    }

}

 

  1. 控制台打印结果

     

Power start...

Memory start...

CPU start...

---------------

computer run...

---------------

CPU shutdown...

Memory shutdown...

Power shutdown...

 

  1. 优点:
    1. 外观模式屏蔽了子系统组件,从而简化了接口,减少客户端处理的对象数据并使子系统的使用更加简单
    2. 外观模式实现了客户单和子系统的耦合关键,而子系统内部的功能是紧耦合的,松耦合是子系统的变化不会影响到客户端
  2. 缺点:
    1. 如果修改了子系统那么需要修改外观类或客户端的源码
  3. 应用场景
    1. 为一个复杂的子系统提供简单的接口
    2. 提供子系统的独立性
    3. 在层次结构中,可以定义外观模式定义系统中每一层的入口
  4. 总结
    1. 以上就是对于外观模式的基本了解了,外观模式的最大好处,也就是优点也就体现出来了,那就是客户端跟子系统松散耦合。
原文地址:https://www.cnblogs.com/lvsling/p/8480478.html