外观模式
2016-06-17 00:34
381 查看
前言:
根据个人对外观模式(Facade)的理解,个人认为外观模式所起的作用就是将客户端所需要的功能从多个模块中将其
整合在一起,然后再供客户端去调用;注意,客户端所需要的功能,也许是分布在多个模块中,所以这时,我们就需要
将客户端所需的多个功能整合进一个类(Facade)中,这样客户端就可以直接调用这个类中的一个方法,而无需每个模块
的功能都亲自去调用一遍,以方便客户端的使用;
外观模式的定义:
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
(界面在这里指的是这个提供的public方法)
外观模式的代码示例:
AModule:
AModuleImpl:
BModule:
BModuleImpl:
Facade: (外观模式)
Client:
运行结果:
总结:
1>
以前,我们编写代码,当某个客户端需要多个功能,并且多个功能分别分布在多个模块上时,
我们一般是直接依次从多个模块身上去调用;当我们学习了外观模式之后,我们体会到:
当客户端需要多个分布在不同模块上的功能时,这是我们可以将其进行一个封装,以方便
客户端的调用,而无需让客户端还去了解各模块之间的关系以及各模块的功能的调用,方便
及简化了客户端对功能的调用,与此同时,也能让整个代码的风格,看上去更清晰易懂,封装
隔离,也方便了我们对于代码的维护;当其他客户端也需要相同功能时,代码也能起到很好的
复用效果;但倘若客户端只需要某一个模块的功能,而不是多个模块上的功能,这时我们就没有
必要去使用外观模式(Facade)了
2>
外观模式与简单工厂不同之处在于,外观模式是将多个模块上的多个功能整合在一起供客户端调用;
而简单工厂是将某一个接口返回给所需要的客户端;
根据个人对外观模式(Facade)的理解,个人认为外观模式所起的作用就是将客户端所需要的功能从多个模块中将其
整合在一起,然后再供客户端去调用;注意,客户端所需要的功能,也许是分布在多个模块中,所以这时,我们就需要
将客户端所需的多个功能整合进一个类(Facade)中,这样客户端就可以直接调用这个类中的一个方法,而无需每个模块
的功能都亲自去调用一遍,以方便客户端的使用;
外观模式的定义:
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
(界面在这里指的是这个提供的public方法)
外观模式的代码示例:
AModule:
package facade; /** * Created by Will Smith on 2016/6/17. */ public interface AModule { public void testA(); public void testAA(); }
AModuleImpl:
package facade; /** * Created by Will Smith on 2016/6/17. */ public class AModuleImpl implements AModule { @Override public void testA() { System.out.println("testA"); } @Override public void testAA() { System.out.println("testAA"); } }
BModule:
package facade; /** * Created by Will Smith on 2016/6/17. */ public interface BModule { public void testB(); public void testBB(); }
BModuleImpl:
package facade; /** * Created by Will Smith on 2016/6/17. */ public class BModuleImpl implements BModule { @Override public void testB() { System.out.println("testB"); } @Override public void testBB() { System.out.println("testBB"); } }
Facade: (外观模式)
package facade; /** * Created by Will Smith on 2016/6/17. */ public class Facade { public static void testFacade(){ AModuleImpl aModule = new AModuleImpl(); BModuleImpl bModule = new BModuleImpl(); /*** * 将客户端所需的功能整合在一个模块中; * **/ aModule.testA(); bModule.testBB(); } }
Client:
package facade; /** * Created by Will Smith on 2016/6/17. */ /*** * 假设Client客户端在这里需要调用 * testA()和testBB()方法 * **/ public class Client { public static void main(String[] strings){ /*** * 这里只需调用Facade里边的testFacade()方法即可, * 无需AModuleImpl的testA()和BModuleImpl的testBB()方法 * 都依次进行调用 * ***/ Facade.testFacade(); } }
运行结果:
总结:
1>
以前,我们编写代码,当某个客户端需要多个功能,并且多个功能分别分布在多个模块上时,
我们一般是直接依次从多个模块身上去调用;当我们学习了外观模式之后,我们体会到:
当客户端需要多个分布在不同模块上的功能时,这是我们可以将其进行一个封装,以方便
客户端的调用,而无需让客户端还去了解各模块之间的关系以及各模块的功能的调用,方便
及简化了客户端对功能的调用,与此同时,也能让整个代码的风格,看上去更清晰易懂,封装
隔离,也方便了我们对于代码的维护;当其他客户端也需要相同功能时,代码也能起到很好的
复用效果;但倘若客户端只需要某一个模块的功能,而不是多个模块上的功能,这时我们就没有
必要去使用外观模式(Facade)了
2>
外观模式与简单工厂不同之处在于,外观模式是将多个模块上的多个功能整合在一起供客户端调用;
而简单工厂是将某一个接口返回给所需要的客户端;
相关文章推荐
- 第二章 --- 关于Javascript 设计模式 之 策略模式
- 标准库errno.h 查看错误代码编号,errno:4 与error:2
- uva 11292
- python里面出现中文的时候报错 'ascii' codec can't encode characters in position
- Spring Boot
- Web开发笔记(3):Eclipse中调整JSP字体大小
- 问题解决:Linux 命令行超过1行时 ,会覆盖第一行,而不是从新的一行显示
- R语言体验一
- 图解DataGridView编辑列
- java实现ssl单/双向认证通信[推荐]
- W-D-S-DDR
- 接口的定义和作用
- ios学习路线—Objective-C(Runtime Method Swizzling)
- ClassPathXmlApplicationContext Caused by: java.lang.IllegalArgumentException
- iOS模糊效果的实现
- 10个学习Android开发的网站推荐
- 【CISP笔记】数据库及应用安全
- intptr_t, uintptr_t
- 用实战为你讲解UIKit性能调优
- jz2440: linux/arch/arm/下面的plat-和mach-