java 设计模式之门面模式
2016-06-30 16:13
363 查看
门面模式简介
面模式(facade pattern),又称外观模式,为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简而言之,就是把一堆复杂的流程封装成一个接口供给用户更简单的使用,这个设计模式里有三个角色:1)门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
2)子系统角色(subsystem):实现了子系统的功能。对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信息和链接。
3)客户角色:调用 façade 角色来完成要得到的功能。
具体案例
一个普通的小案例:子系统及门面类
package sjms.mm.simple; public class Fade { public void testA(){ A a = new A(); a.test(); } public void testB(){ B b = new B(); b.test(); } public void testC(){ C c = new C(); c.test(); } } class A{ public void test(){ System.out.println("访问A"); } } class B{ public void test(){ System.out.println("访问B"); } } class C{ public void test(){ System.out.println("访问C"); } }
测试
package sjms.mm.simple; public class Clinet { public static void main(String args[]){ //传统调用子系统方法 A a= new A(); a.test(); B b = new B(); b.test(); C c = new C(); c.test(); //门面类调用模式 Fade face = new Fade(); face.testA(); face.testB(); face.testC(); } }
再来个形象的案例吧,我们去旅游定一个旅馆:
子系统有餐厅,打扫卫生,开房,泡温泉等等,一个门面类前台
package sjms.mm.complex; public class HotelFade { //类似于前台一个门面对象,这儿如果有多个餐厅可以设计成数组,如果一个餐厅可以提供很多可以开启多线程。 private ServiceFood food; private ServiceClean clean; private ServiceRoom room; //如果只有一个门面类,这儿可以设计成单例模式。 HotelFade(){ food = new ServiceFood(); clean=new ServiceClean(); room = new ServiceRoom(); } public void servicefood(){ food.service(); } public void serviceclean(){ clean.service(); } public void serviceroom(){ room.service(); } } class ServiceFood{ public void service(){ System.out.println("吃饭:为你提供饭菜"); } } class ServiceClean{ public void service(){ System.out.println("卫生:为你打扫卫生"); } } class ServiceRoom{ public void service(){ System.out.println("住宿:为你开房"); } }
客户端测试:
package sjms.mm.complex; public class Clinet { public static void main(String[] args) { HotelFade hf = new HotelFade(); hf.serviceroom(); //开房 hf.serviceclean(); //打扫房间 hf.servicefood(); //上菜 hf.serviceclean(); //打扫房间 具体没有写 hf.serviceroom(); //退房 } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序