23种设计模式之外观模式

基本介绍

  1. 也叫过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
  2. 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
    3.类图如下:
    在这里插入图片描述

1)外观类(Facade):为调用端提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象
2)调用者(Client):外观接口的调用者
3)子系统的集合:指模块或者子系统,处理Facade对象指派的任务,他是功能的实际提供者
4.解决的问题:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口,至此客户端不与系统耦合,外观类与系统耦合

代码示例

https://gitee.com/ldj123/design-patterns.git

注意事项

1)外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性
2)外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展
3)通过合理的使用外观模式,可以帮我们更好的划分访问的层次
4)当系统需要进行分层设计时,可以考虑使用Facade模式
5)不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。

源码中应用

MyBatis 中的Configuration 去创建MetaObject 对象使用到外观模式,部分代码示例如下:

 public class Configuration {
    protected ReflectorFactory reflectorFactory =
             new DefaultReflectorFactory();
     protected ObjectFactory objectFactory =
             new DefaultObjectFactory();
     protected ObjectWrapperFactory objectWrapperFactory =
             new DefaultObjectWrapperFactory();
     public MetaObject newMetaObject(Object object) {
         return MetaObject.forObject
                 (object, objectFactory, objectWrapperFactory, reflectorFactory);
     }
 }
public class MetaObject{
   private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) {
         this.originalObject = object;
         this.objectFactory = objectFactory;
         this.objectWrapperFactory = objectWrapperFactory;
         this.reflectorFactory = reflectorFactory;
         if (object instanceof ObjectWrapper) {
             this.objectWrapper = (ObjectWrapper) object;
         } else if (objectWrapperFactory.hasWrapperFor(object)) {
             this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);
         } else if (object instanceof Map) {
             this.objectWrapper = new MapWrapper(this, (Map) object);
         } else if (object instanceof Collection) {
             this.objectWrapper = new CollectionWrapper(this, (Collection) object);
         } else {
             this.objectWrapper = new BeanWrapper(this, object);
         }}
     public static MetaObject forObject(Object object, ObjectFactory,objectFactoryObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) {}

类图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值