设计模式学习笔记——门面模式
门面模式
在看其他设计模式的时候,书中提到一句,细心的读者会发现,这里用到了门面模式,这个模式太常见了,以至于不经意就用到了他,于是我也便看了这个门面模式。
门面模式是一个非常简单的模式,应该是看到现在,最容易理解,也真的是平时一直在使用的,不过按照惯例,还是需要总结一下。
门面模式是对象的结构模式,指外部与一个子系统的通信通过一个统一的门面进行。
门面模式提供一个高层次的接口,使得子系统更加易用。
门面模式中包括2个角色:
门面角色Facade:客户端调用该角色,他知道子系统的功能,会将客户端的请求发送到相应的系统中去
子系统角色SubSystem:是一个类的结合,负责调用与客户端请求相关的子系统。
看下示例程序吧,从类名就可以看出他们所扮演的角色
两个SubSystem,代表着子系统
public class SubSystem { public void hello(){ System.out.println("SubSystem says Hello"); } public void bye(){ System.out.println("SubSystem says Bye"); } } public class SubSystem { public void hello(){ System.out.println("SubSystem says Hello"); } public void bye(){ System.out.println("SubSystem says Bye"); } }
Facade门面,给我的概念类似于一个管理类,把对子系统的调用都写在了这里面
public class Facade { private SubSystem subSystem; private SubSystem2 subSystem2; public Facade(){ subSystem=new SubSystem(); subSystem2=new SubSystem2(); } public void hello(){ subSystem.hello(); subSystem2.hello(); } public void bye(){ subSystem.bye(); subSystem2.bye(); } }
执行一下
public class FacadePattern { public static void main(String[] args) { Facade facade=new Facade(); facade.hello(); facade.bye(); } }
这是运行结果:
SubSystem says Hello
SubSystem2 says Hello
SubSystem says Bye
SubSystem2 says Bye
适合使用的情况
1 为一个复杂子系统提供一个简单接口
2 提高子系统的独立性
3 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
网上还提到了门面模式在数据库操作过程中的应用,例如一个封装数据库一些操作了的DAO层,在客户端到数据库之间,添加入“门面”,“门面”调用DAO层方法,实现相关查询并返回处理后的结果,这样子一来避免了客户端直接操作数据库。
上一篇: 门面模式(Facade Pattern)
下一篇: 自己写的一个WebSocket服务器