Java的23种设计模式---(10)外观模式(又称门面模式)

外观模式(Facade)

 

外观模式:隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。

迪米特法则:一个软件实体应当尽可能少的与其他实体发生相互作用。

 

外观模式核心:为子系统提供统一的入口。封装子系统的复杂性,以便客户端调用。

外观模式分为三个角色:

  1. 门面角色:外观模式的核心。被客户角色调用,熟悉子系统的功能。内部根据客户角色的需求预订了几种功能的组合。
  2. 子系统角色:实现了子系统的功能。对客户角色和Facade是未知的。内部可以有系统内的相互交互,也可以提供给外界调用的接口。
  3. 客户角色:通过调用Facade来完成要实现的功能。

外观模式:主要是让客户端和子系统解耦,让子系统更容易扩展与维护,并且让客户端不需要知道子系统内部的实现,只关注门面角色即可。

 

案例:想组装一台电脑,如果自己去组装需要挑选cpu,disk等硬件,需要对这些硬件有一定的了解,这样比较麻烦,这时可以使用外观模式,给钱给一个比较懂电脑的人,让他去帮你挑cpu,disk并组装电脑,是不是比较方便。

门面角色

package com.kevin.结构型模式.外观模式.facade;

/**
 * @author kevin
 * @version 1.0
 * @description     门面类
 * @createDate 2019/3/2
 */
public class Computer {

    private CPU cpu;
    private Disk disk;
    private Memory memory;

    public Computer(){
        cpu = new CPU();
        disk = new Disk();
        memory = new Memory();
    }

    public void start(){
        System.out.println("Computer start begin...");

        cpu.start();
        disk.start();
        memory.start();
        System.out.println("Computer start end...");
    }

    public void shutDown(){
        System.out.println("Computer shutDown begin...");
        cpu.shutDown();
        disk.shutDowm();
        memory.shutDown();
        System.out.println("Computer shutDown end...");
    }

}

子系统角色

package com.kevin.结构型模式.外观模式.facade;

/**
 * @author kevin
 * @version 1.0
 * @description     cpu子系统类
 * @createDate 2019/3/2
 */
public class CPU {

    public void start(){
        System.out.println("CPU is start...");
    }

    public void shutDown(){
        System.out.println("CPU is end...");
    }
}
package com.kevin.结构型模式.外观模式.facade;

/**
 * @author kevin
 * @version 1.0
 * @description     Disk子系统类
 * @createDate 2019/3/2
 */
public class Disk {

    public void start(){
        System.out.println("Disk is start...");
    }

    public void shutDowm(){
        System.out.println("Disk is end...");
    }
}
package com.kevin.结构型模式.外观模式.facade;

/**
 * @author kevin
 * @version 1.0
 * @description     Memory子系统类
 * @createDate 2019/3/2
 */
public class Memory {

    public void start(){
        System.out.println("Memory is start...");
    }

    public void shutDown(){
        System.out.println("Memory is end...");
    }
}

客户角色(测试外观模式)

package com.kevin.结构型模式.外观模式.facade;

/**
 * @author kevin
 * @version 1.0
 * @description     测试外观模式
 * @createDate 2019/1/18
 */
public class Test {

    public static void main(String[] args) {

        Computer computer = new Computer();
        System.out.println("买电脑,将钱给中介(门面类),由中介挑选cpu,disk等...");
        computer.start();
        System.out.println("购买中");
        computer.shutDown();
        System.out.println("买到电脑...");
    }
}

开发中常见的场景

 

使用频率很高。哪里都会遇到。各种技术和框架中,都有外观模式的使用。如:

  • JDBC封装后的,commons提供的DBUtils类,Hibernate提供的工具类、Spring JDBC工具类等

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值