软件设计模式第八篇(外观模式)

什么叫外观模式

什么是外观模式? 外观模式也叫门面模式,它为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

界面:主要指从一个组件外部来看这个组件,能够看到什么,这就是这个组件的界面,即外观(这里不是我们想的那么简单的GUI)。

接口:主要是指外部和内部交互的一个通道,通常是指一些方法,可以是类方法,也可以使interface的方法。

外观模式的场景

比如,我们装修好了一座房子后,需要购买桌椅板凳,家用电器,是不是跑了家具市场,还要跑家电市场,如果有这么一家装修公司,你只需要告诉他你需要什么类型的家具,什么品牌的电器。他就会帮你采购回来,你就不需要关心在哪买的,这样是不是省心很多呢,看下图

在这里插入图片描述
如果没有通过装修公司这个门面,那就所以功能都得自己跑。。。

代码实现

实现家具市场购买家具的接口

/**
 * @Author: dengcs
 * @Date: 2020/6/28 15:43
 * Comment:购买家具接口
 */
public interface BuyA {
    public void buyJj();
}

购买家具实现类

/**
 * @Author: dengcs
 * @Date: 2020/6/28 15:50
 * Comment:购买家具实现接口
 */
public class BuyAimpl implements BuyA{
    @Override
    public void buyJj() {
        System.out.println("购买家具---桌椅板凳");
    }
}

实现家电市场购买家电的接口

/**
 * @Author: dengcs
 * @Date: 2020/6/28 15:43
 * Comment:购买家电接口
 */
public interface BuyB {
    public void buyJd();
}

购买家电实现类

/**
 * @Author: dengcs
 * @Date: 2020/6/28 15:50
 * Comment:购买家电实现接口
 */
public class BuyBimpl implements BuyB{
    @Override
    public void buyJd() {
        System.out.println("购买家电---冰箱电视");
    }
}

然后编写一个外观模式的接口

/**
 * @Author: dengcs
 * @Date: 2020/6/28 15:54
 * Comment:外观接口
 */
public interface Facade {
    public void buy();
}

最后实现外观接口buy

/**
 * @Author: dengcs
 * @Date: 2020/6/28 15:54
 * Comment:外观接口实现
 */
public class FacadeImpl implements Facade {
    @Override
    public void buy() {
      BuyA buyA = new BuyAimpl();
      //购买家具
      buyA.buyJj();
      BuyB buyB = new BuyBimpl();
      //购买家电
      buyB.buyJd();
    }
}

测试

编写一个测类

/**
 * @Author: dengcs
 * @Date: 2020/6/28 15:58
 * Comment:外观模式测试
 */
public class Facadetest {
    public static void main(String[] args) {
        Facade facade = new FacadeImpl();
        facade.buy();
    }
}

测试结果为
在这里插入图片描述

写在最后

优点
(1)松散耦合(外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护);

(2)简单易用(外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观交互就可以了,相当于外观类为外部客户端使用子系统提供了一站式服务)

(3)更好地划分访问的层次(通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到外观中,这样既方便客户端使用,也很好地隐藏了内部的细节)

缺点
过多的或者是不太合理的Facade也容易让人迷惑。到底是调用Facade还是直接调用模块,这是一个艰难的选择。

想了解更多的设计模块,请关注我吧。。_

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值