自学内容网 自学内容网

设计模式:10、外观模式

目录

0、定义

1、外观模式的两种角色

2、外观模式的UML类图

3、示例代码


0、定义

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

1、外观模式的两种角色

  • 子系统(Subsystem):子系统是若干个类的集合,这些类的实例协同合作为用户提供所需要的功能,子系统中的任何类都不包含外观类的实例引用。
  • 外观(Facade):外观是一个类,该类包含子系统中全部或部分类的实例引用,当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统外观类的实例打交道。

2、外观模式的UML类图

3、示例代码

子系统

package xyz.jangle.design.facade;

public class ClassA {

public void doSomeThing() {
System.out.println("ClassA:to do some thing");
}

}
package xyz.jangle.design.facade;

public class ClassB {

public void doSomeThing() {
System.out.println("ClassB:to do some thing");
}

}
package xyz.jangle.design.facade;

public class ClassC {

public void doSomeThing() {
System.out.println("ClassC:to do some thing");
}

}
package xyz.jangle.design.facade;

public class ClassD {

public void doSomeThing() {
System.out.println("ClassD:to do some thing");
}

}

外观

package xyz.jangle.design.facade;
/**
 * 外观类,委托子系统调用相关方法
 * @author Administrator
 *
 */
public class Facade {

private ClassA classA;
private ClassB classB;
private ClassC classC;
private ClassD classD;
public Facade(ClassA classA, ClassB classB, ClassC classC, ClassD classD) {
super();
this.classA = classA;
this.classB = classB;
this.classC = classC;
this.classD = classD;
}
/**
 * 外观调用全部子系统执行相关的方法,完成业务需求。
 */
public void todoSomething() {
classA.doSomeThing();
classB.doSomeThing();
classC.doSomeThing();
classD.doSomeThing();
}
/**
 * 外观调用部分子系统的相关方法,完成业务需求。
 */
public void todoSomething2() {
classA.doSomeThing();
classD.doSomeThing();
}


}

客户端(使用)

package xyz.jangle.design.facade;

public class AppMain10 {

public static void main(String[] args) {

Facade facade = new Facade(new ClassA(), new ClassB(), new ClassC(), new ClassD());

facade.todoSomething();
System.out.println("-------------");
facade.todoSomething2();
}

}

输出结果:

ClassA:to do some thing
ClassB:to do some thing
ClassC:to do some thing
ClassD:to do some thing
-------------
ClassA:to do some thing
ClassD:to do some thing


原文地址:https://blog.csdn.net/Bof_jangle/article/details/144034199

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!