设计模式——外观模式

一、定义:


如果有一个系统,内部分为三个子系统:S1,S2,S3,当用户A调用了子系统S1,S2的接口,用户B也调用了子系统S1,S2的接口。那么当子系统S1,S2发生变化时,它们将会影响到所有调用了子系统的客户,子系统与用户的直接交互无疑使他们之间高度耦合,这个时候用外观模式就是很合适的。外观模式将子系统的接口集成在一个高层接口中,使用者可以直接调用高层的接口而忽略其内部子系统的变化,从而降低了子系统之间的耦合度。运用外观模式后,用户与外观直接交互,而外观承担了与子系统之间交互的责任。外观模式适合提供特定的高层次的综合服务,而非低层次的单项服务。

 

二、外观模式框图






三、以计算机为例上一个实例


我们知道计算机硬件简单的可以分为CPU,内存(Memory),硬盘(Disks)等,启动/关闭计算机时需要启动/关闭CPU,内存,硬盘,我们就计算机的启动和关闭来呈现外观模式在此的一个应用。


3.1 CPU类

package designpatterns.facade;

/**
 * Created by Olive on 2017/11/30.
 */
public class CPU {

    public void startup() {
        System.out.println("startup the CPU!");
    }

    public void shutdown() {
        System.out.println("shutdown the CPU!");
    }
}

3.2 Memory类

package designpatterns.facade;

/**
 * Created by Olive on 2017/11/30.
 */
public class Memory {

    public void startup() {
        System.out.println("startup the Memory!");
    }

    public void shutdown() {
        System.out.println("shutdown the Memory!");
    }
}

3.3 Disks类

package designpatterns.facade;

/**
 * Created by Olive on 2017/11/30.
 */
public class Disks {

    public void startup() {
        System.out.println("startup the Disks!");
    }

    public void shutdown() {
        System.out.println("shutdown the Disks!");
    }
}

3.4 Computer类(即外观)

package designpatterns.facade;

/**
 * Created by Olive on 2017/11/30.
 */
public class Computer {

    private CPU cpu;
    private Disks disks;
    private Memory memory;

    public Computer(){
        cpu = new CPU();
        disks = new Disks();
        memory = new Memory();
    }

    public void startup() {
        System.out.println("Computer is starting up!");
        cpu.startup();
        disks.startup();
        memory.startup();
        System.out.println("Computer started successfully!");
    }

    public void shutdown() {
        System.out.println("Computer is shutting down!");
        cpu.shutdown();
        disks.shutdown();
        memory.shutdown();
        System.out.println("Computer shut down successfully!");
    }
}

3.5 User类(即客户端)

package designpatterns.facade;

/**
 * Created by Olive on 2017/11/30.
 */
public class User {

    public static void main(String[] args){

        Computer computer = new Computer();
        computer.startup();

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

        computer.shutdown();
    }
}

3.6 输出结果

Computer is starting up!
startup the CPU!
startup the Disks!
startup the Memory!
Computer started successfully!

*********************************

Computer is shutting down!
shutdown the CPU!
shutdown the Disks!
shutdown the Memory!
Computer shut down successfully!

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值