标签:
1.定义
为子系统中的一组接口提供一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Facade:定义子系统多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系统对象。
模块:接受Facade对象的委派,真正实现功能,各个模块之间可能有交互。
Facade对象知道各个模块,但各个模块不应该知道Facade对象。
2.代码示例
以代码生成工具的例子来说,为了方便用户灵活配置并且正确生成代码,代码生成工具可以通过使用Facade模式来提供一个对外的一致的界面,使得客户端与内部各个模块实现解耦
1.数据层代码生成模块示例
1 package com.facade.example2; 2 /** 3 * 数据层 4 * @author admin 5 * 6 */ 7 public class DAO { 8 public void generate(){ 9 //1.从配置管理模块中获取配置信息 10 ConfigModel cm=ConfigManager.getInstance().getConfigData(); 11 if(cm.isNeedGenDAO()){ 12 //生成数据层代码文件并保存 13 System.out.println("正在生成数据层代码文件"); 14 } 15 } 16 }
2.业务逻辑层代码生成示例
1 package com.facade.example2; 2 /** 3 * 逻辑层代码生成模块 4 * @author admin 5 * 6 */ 7 public class Business { 8 /** 9 * 逻辑层代码生成方法 10 */ 11 public void generate(){ 12 //1.从配置管理模块中获取配置信息 13 ConfigModel cm=ConfigManager.getInstance().getConfigData(); 14 if(cm.isNeedGenBusiness()){ 15 //生成逻辑层代码文件并保存 16 System.out.println("正在生成逻辑层代码文件"); 17 } 18 } 19 }
3.表现层代码生成示例
1 package com.facade.example2; 2 /** 3 * 生成表现层的模块 4 * @author admin 5 * 6 */ 7 public class Presentation { 8 public void generate(){ 9 //1.从配置管理模块中获取配置信息 10 ConfigModel cm=ConfigManager.getInstance().getConfigData(); 11 if(cm.isNeedGenPresentation()){ 12 //2.按照要求生成代码,并保存文件 13 System.out.println("正在生成表现层模块的代码文件"); 14 } 15 } 16 }
4.Facade对外提供统一界面的实现
package com.facade.example2; public class Facade { public void generate(){ new Presentation().generate(); new Business().generate(); new DAO().generate(); } }
5.这样一来客户端可以完全不知道系统内部各个子系统之间的调用关系,并且当系统内部实现改变时也不会影响客户端的使用
package com.facade.example2; public class Client { public static void main(String[] args) { new Facade().generate(); } }
标签:
原文地址:http://www.cnblogs.com/luoye0726/p/4254753.html