设计模式演化之外观模式

定义

要求一个子系统的外部与内部的通信必需通过一个统一的对象执行,该模式提供一个高层的接口,使得子系统容易复用

演化

在我们的开发生涯中,免不了使用各种各样的第三方库。如Gson,EasyPermissions,Retrofit2,EventBus等。我们会发现它们都有一个共同的特点:尽管源码的内容很多,Java类的文件也有许多。但在我使用的时候会发现往往只需要调用某一个类的方法就能使用这个系统中的所有功能了。其实这就是外观模式的一种实现,这个管理着所有功能的类就是外观类。

示例
1.我们提供一个图形库,让调用者能够通过它画出各种各样的图形。

// 1.定义绘制功能接口
public interface Shape {
    void draw();
}

// 2.定义各个实体类
public class Square implements Shape {
    @Override
    public void draw() {
        // 画正方形
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        // 画三角形
    }
}

public class Circle implements Shape {
    @Override
    public void draw() {
        // 画圆形
    }
}

到此结束,我们会发现以下问题

  • 给调用者提供说明文档的时候,需要讲清楚每一个图形类的含义,并提供相应的使用示例
  • 调用者需要写不少代码来绘图

2.现在我们给它加一个外观类

public class ShapeUtil {
    
    public static void drawSquare() {
        Shape square = new Square();
        square.draw();
    }
    public static void drawRectangle() {
        Shape rectangle = new Rectangle();
        rectangle.draw();
    }
    public static void drawCircle() {
        Shape circle = new Circle();
        circle.draw();
    }
}

这时调用者只需要关注ShapeUtil类就好了。说明文档里只需要说明ShapeUtil中的几个方法的功能,调用者调用的时候也只需要一行代码。

优点

(1)减少系统的相互依赖,所有的对子系统的依赖其实都只是对外观类的依赖。
(2)子系统改变之后,外界感知不到,自然也不用修改代码
(3)增强子系统的安全性
(4)整个系统只暴露一个外观类出来,所有使用该系统功能的代码都是通过外观类实现,简洁清晰

缺点

(1)如果系统十分庞大,外观类需要集成的功能将会非常多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值