Java 设计模式-外观模式

目录

一. 概念介绍

二. 代码实现

三. 优点

松散耦合:

简单易用:

更好的划分访问层次:


. 概念介绍

  外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。

. 代码实现

  第一步:先定义系统A、系统B、系统C这三个类,

package test;

/**
 *  A系统
 * @author ningbeibei
 *
 */
public class SystemA {
    //A系统方法
    public void functionA() {
        System.out.println("我是系统A...");
    }
}
package test;

/**
 *  B系统
 * @author ningbeibei
 *
 */
public class SystemB {
    //B系统方法
    public void functionB() {
        System.out.println("我是系统B...");
    }
}
package test;

/**
 *  C系统
 * @author ningbeibei
 *
 */
public class SystemC {
    //C系统方法
    public void functionC() {
        System.out.println("我是系统C...");
    }
}

第二步:定义一个高层接口,分别声明调用三个子系统得方法

package test;

/**
 * 定义一个更高层得接口,使其实现类实现所有方法
 * @author ningbeibei
 *
 */
public interface Facade {
    //方法A
    void methodA();
    //方法B
    void methodB();
    //方法C
    void methodC();
}

第三步:实现定义得高层接口,并且持有子系统对象引用

package test;

/**
  * 实现我们刚才定义得高层接口中得方法 
 * @author ningbeibei
 *
 */
public class FacadeImpl implements Facade {

    //这个系统需要实现类中持有他得引用。
    private SystemA systema;
    private SystemB systemb;
    private SystemC systemc;
    
    /**
     * 重写实现类构造方法,初始化这个三个类得对象
     */
    FacadeImpl(){
        systema = new SystemA();
        systemb = new SystemB();
        systemc = new SystemC();
        
    }
    
    //调用A系统方法
    @Override
    public void methodA() {
        systema.functionA();
    }
    //调用B系统方法
    @Override
    public void methodB() {
        systemb.functionB();
    }
    //调用B系统方法
    @Override
    public void methodC() {
        systemc.functionC();
    }

}

第四步:测试类编写

package test;

/**
 * 测试类
 * @author ningbeibei
 *
 */
public class test1 {

    //测试方法
    public static void main(String[] args) {
        
        /**客户端在调用这个三个系统时只需要通过Facade
         * 这个接口就可以访问各个系统得方法*/
        Facade fac = new FacadeImpl();
        fac.methodA();
        fac.methodB();
        fac.methodC();
    }

}

运行结果

三. 优点

松散耦合:

  使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护。

简单易用:

  客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。

更好的划分访问层次:

  有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

动物园首领

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值