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

本文深入探讨了外观模式的设计理念,解释了其如何简化复杂的子系统,提高代码的可维护性和扩展性。通过组装电脑的实例,生动展示了外观模式的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

外观模式(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工具类等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值