外观模式
2016-02-18 12:44
495 查看
使用场景
在开发过程中,我们经常需要对一个应用分成不同的层次,例如经典的三层架构,就需要考虑数据访问层和逻辑处理层,逻辑处理层和表示层的层与层之间建立外观Facade,这样可以给复杂的子系统提供一个方便操作的简单的接口,使得耦合程度大大降低。
其次在开发过程中,子系统往往因为过多的重构而变得越来越复杂,大多数的模式使用时也会产生很多很小的类,这本是好事,但是却增加了外部调用的复杂度,这是增加一个Facade类,就能很好的解决这种情况。
在维护一个遗留的大型系统的时候,可能这个系统已经过时并且非常难以维护和扩展了,但是因为包含了很多非常重要的功能,新的需求开发必须依赖它,此时使用外观模式也是非常适合的,给新系统提供一个外观Facade类,来提供设计粗糙的旧系统比较清晰的简单的交互接口,让新系统与facade对象交互,Facade与遗留代码交互所有复杂的工作。
用例图
代码实现
package com.liran.main.DesignPattern.外观模式; /** * 外观模式 * 为子系统中的一组接口提供一个统一的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 * Created by LiRan on 2016-02-17. */ public class Facade_Pattern { public static void main(String[] args) { Client client = new Client(new Facade()); client.doSomeThing(); } } /** * 客户端 */ class Client { private Facade facade; public Client(Facade facade) { this.facade = facade; } public void doSomeThing() { facade.MethodA(); facade.MethodB(); } } /** * 外观类 */ class Facade { private SubSystemOne systemOne; private SubSystemTwo systemTwo; private SubSystemThree systemThree; private SubSystemFour systemFour; public Facade() { systemOne = new SubSystemOne(); systemTwo = new SubSystemTwo(); systemThree = new SubSystemThree(); systemFour = new SubSystemFour(); } public void MethodA() { System.out.println("方法组A---------"); systemOne.MethodOne(); systemThree.MethodThree(); } public void MethodB() { System.out.println("方法组B-----------"); systemTwo.MethodTwo(); systemFour.MethodFour(); } } /** * 子系统类 */ class SubSystemOne { public void MethodOne() { System.out.println("子系统方法一"); } } /** * 子系统类 */ class SubSystemTwo { public void MethodTwo() { System.out.println("子系统方法二"); } } /** * 子系统类 */ class SubSystemThree { public void MethodThree() { System.out.println("子系统方法三"); } } /** * 子系统类 */ class SubSystemFour { public void MethodFour() { System.out.println("子系统方法四"); } }
源码下载:Github
有问题欢迎在评论中提问。相关文章推荐
- 架构纵横谈之二 ---- 架构的模式与要点
- BS项目中的CSS架构_仅加载自己需要的CSS
- 关于三种主流WEB架构的思考
- Android操作系统的架构设计分析
- w3c技术架构介绍
- linux学习笔记 linux目录架构
- mysql数据库应付大流量网站的的3种架构扩展方式介绍
- 从零开始搭建MySQL MMM架构
- C/S和B/S两种架构的概念、区别和联系
- 限时抢购秒杀系统架构分析与实战
- 也谈淘点点60s短信订单的架构设计
- android技术内幕心得
- SequoiaDB 笔记
- Web服务器Nginx多方位优化策略
- 面试:(设计,架构)
- 十日谈
- 悠然推荐:你的架构是如何一步步腐化的?
- 谈谈应用层切面设计
- 微信技术总监周颢:一亿用户背后架构秘密
- 大型网站架构改进历程:存储的瓶颈(3)