Java设计模式之结构型模式-外观模式(Facade)
来源:互联网 发布:工行td交易软件 编辑:程序博客网 时间:2024/06/05 06:21
我在学习这个外观模式的时候,多多少少还是有点熟悉感的。后来仔细想了想,其实这个模式我们很常用,比如我们所熟悉的MVC模式就运用到了这个外观模式。
外观模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加的容易使用。
两个要素
1. 外观类(Facade): 知道哪些子系统负责处理请求,并将客户的请求代理给适当的子系统对象。
2. 子系统类集合(SubSystem Classes): 实现子系统的具体功能,处理由Facade对象指派过来的任务。不具备对Facade对象的任何引用。
示例
使用过MVC模式都应该清楚MVC模式将整个系统分成了Controller、Service、Dao三个层次。这里我们先一一对应下,Controller层就好比我们的客户端,Service层则好比我们的外观类(Facade),而Dao层就相当于我们的子系统类集合(SubSystem Classes)。
这个举个例子来讲。比如我们这里有一个小系统,拥有User、Daily和Photo三张表,分别用来存储用户基本信息,用户的日志和用户的照片。同时用UserDao、DailyDao、PhotoDao来对应操作张三表,并用UserService中的deleteUserAllInfo()方法来删除用户所有有关的信息。
类图
画个类图简单来理解下上面示例的结构:
实现过程
1. 创建子系统类 UserDao、DailyDao和PhotoDao。这里不考虑Dao层对具体表的操作,仅仅用简单的输出作为具体的实现。
public class UserDao { public void deleteUser(String userName) { System.out.println(userName + " 用户基本信息删除成功..."); }}
public class DailyDao { public void deleteDaily(String userName) { System.out.println(userName + " 用户相关日志删除成功..."); }}
public class PhotoDao { public void deletePhoto(String userName) { System.out.println(userName + " 用户相关照片删除成功..."); }}
2. 创建外观类 UserService,了解所有子系统的方法或者属性,进行组合,以备客户端的调用。这里提供deleteUserAllInfo这个方法,主要用来删除用户相关的所有的信息。
public class UserService { UserDao userDao; DailyDao dailyDao; PhotoDao photoDao; public UserService() { userDao = new UserDao(); dailyDao = new DailyDao(); photoDao = new PhotoDao(); } public void deleteUserAllInfo(String userName) { userDao.deleteUser(userName); dailyDao.deleteDaily(userName); photoDao.deletePhoto(userName); }}
3. 创建客户端测试类 Controller
public class Controller { public static void main(String[] args) { UserService userService = new UserService(); userService.deleteUserAllInfo("赵海豪"); }}
运行的结果如下:
赵海豪 用户基本信息删除成功...赵海豪 用户相关日志删除成功...赵海豪 用户相关照片删除成功...
优点
1. 解耦: 增加外观类Facade类可以提供一个简单接口,减少客户端和子系统之间的依赖。上述代码相当于为复杂的dao层提供了一个简单的接口,从而使得Controller层和Dao层之间的耦合性大大的降低。
2. 简化操作,提高灵活性: 使用外观类,给复杂的遗留代码提供一个简单清晰的外部接口供外部使用,避免直接调用原有功能所导致客户程序的复杂化。
- 设计模式之外观(Facade)---对象结构型模式
- 设计模式之外观模式Facade(结构型)
- Java设计模式之结构型模式-外观模式(Facade)
- [设计模式-结构型]外观模式(Facade)
- java设计模式之外观模式Facade
- JAVA设计模式之外观(Facade)模式
- java设计模式之外观模式Facade
- 设计模式(结构型)之外观模式(Facade Pattern)
- 【设计模式】结构型模式之Facade外观
- 一天学习两个设计模式之Facade模式(外观模式,结构型模式)
- JAVA设计模式(9) —<结构型>外观模式(Facade)
- Java设计设计模式之外观模式(Facade)
- 【Java 设计模式】接口型模式--Facade(外观)模式
- 设计模式之外观(Facade)模式
- 设计模式之外观模式(Facade)
- 【设计模式】之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- tf入门
- python数据结构之字符串
- flask-用户认证(上)
- 【Shell指令】Linux nohup命令详解
- 给应用程序打一个war包
- Java设计模式之结构型模式-外观模式(Facade)
- hdu 1575 Tr A(矩阵快速幂)
- [maven]常用命令
- nginx + php 修改php.ini生效
- 游戏编程之DirectX的修炼:二(创建属于自己的windows窗口程序:下)
- 20170831美团笔试:长度为n的数组中最长的和为K的倍数的连续子数组
- Swift 中的结构体 (Struct)
- Tyvj1022
- C++中的左值和右值