博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习设计模式——外观模式
阅读量:6769 次
发布时间:2019-06-26

本文共 1748 字,大约阅读时间需要 5 分钟。

hot3.png

1. 认识外观模式

    1. 定义

    为子系统中的一组接口提供一个统一的界面,外观模式提供了一个更高层的接口,这个接口使得子系统更加容易使用。

    2. 组成

    子系统功能模块:多个小的功能模块,真正实现功能的地方

    Facade:外观模式类,用于将子系统中的功能模块组装成一个客户程序所需要的功能,提供给客户程序调用

    3. 参考代码实现

//子系统中的功能模块public class ModuleA {	public void operA(){		System.out.println("正在执行A模块中的operA方法");	}}public class ModuleB {	public void operB(){		System.out.println("正在执行B模块中的operB方法");	}}/** * @ClassName:Facade * @Description:外观模式类, * 在该类中调用子系统中每个模块中的功能,组合构成应用程序中所需要的功能 */public class Facade {	public void test() {		ModuleA a=new ModuleA();		a.operA();		ModuleB b=new ModuleB();		b.operB();	}}/** * @ClassName:Client * @Description:客户程序 */public class Client {	public static void main(String[] args) {		//使用外观模式就不需要和子系统中的需要每个功能模块交互,只需要与Facade类交互即可//		ModuleA a=new ModuleA();//		a.operA();//		ModuleB b=new ModuleB();//		b.operB();		new Facade().test();	}}

2. 理解外观模式

    1. 作用:外观模式的目的不是给子系统添加额外的功能接口,而是为了减少外部程序与子系统中的各个功能模块之间的交互,松散耦合,使外部程序能够更加简单的使用子系统。

    2. 可以将外观模式与工厂模式结合使用,以获取更好的扩展性和维护性,并降低程序整体的耦合性

//子系统的功能模块不变,如上面的代码所示/** * @ClassName:FacadeApi * @Description:在该类中定义客户程序所需要的功能接口 */public interface FacadeApi {	public void test();}/** * @ClassName:Facade * @Description:外观模式类,实现FacadeApi接口 * 在该类中调用子系统中每个模块中的功能,组合构成应用程序中所需要的功能 */public class Facade implements FacadeApi{	public void test() {		ModuleA a=new ModuleA();		a.operA();		ModuleB b=new ModuleB();		b.operB();	}}//工厂类public class FacadeFactory {	public static FacadeApi createFacade(){		return new Facade();	}}/** * @ClassName:Client * @Description:客户程序 */public class Client {	public static void main(String[] args) {		//结合工厂模式		FacadeApi fac=FacadeFactory.createFacade();		fac.test();	}}

    3. 优缺点:

  • 降低应用程序之间的耦合性
  • 简单易用,更好的划分了程序结构之间的层次
  • 过多的或不合理的外观模式类容易使人迷惑,不便于维护

    4. 本质:封装应用程序间的交互,简化调用

 

 

 

 

 

转载于:https://my.oschina.net/ProgramerLife/blog/2245353

你可能感兴趣的文章
排序算法(牢记)
查看>>
昨天开发引入的两个错误--Parcelable
查看>>
ylb:exists(存在)的应用实例
查看>>
[oracle] 系统权限管理
查看>>
图片内容保存到数据库,并从数据库里获取图片
查看>>
JavaScript 时间、格式、转换及Date对象总结
查看>>
令人作呕的OpenSSL
查看>>
计算机中的信息=位+上下文(转)
查看>>
angularjs中 *.min.js.map 404的问题
查看>>
Codeforces Gym 100342C Problem C. Painting Cottages 暴力
查看>>
WPF中Label使用StringFormat
查看>>
Open Live Writer
查看>>
FPGA功耗那些事儿(转载)
查看>>
建造者模式(屌丝专用)
查看>>
Google 地图 API V3 之控件
查看>>
读写文件:每次读入大文件里的一行、读写.CSV文件
查看>>
Toast信息框
查看>>
[翻译]应用程序池和应用程序域的区别
查看>>
最短JavaScript判断是否为IE6、IE的方法
查看>>
PHP同时上传“多个”文件示例,并格式化$_FILES数组信息
查看>>