文章目录
package com.example.demo.designpattern;
/**
* 门面模式/外观模式;结构型模式;
* 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性;
* 门面模式提供一个高层次的接口, 使得子系统更易于使用;
* 应用:Tomcat-RequestFacade;slf4j;jdbc;socket
* 角色:
* - facade 门面角色:客户端可以调用这个角色的方法。 此角色知晓子系统的所有功能和责任。
* - sub_system 子系统角色:子系统并不知道门面的存在。 对于子系统而言, 门面仅仅是另外一个客户端而已。
*/
public class Facade {
private SubSystemA subSystemA;
private SubSystemB subSystemB;
public Facade(SubSystemA subSystemA, SubSystemB subSystemB) {
this.subSystemA = subSystemA;
this.subSystemB = subSystemB;
}
public Facade() {
this.subSystemA = new SubSystemA();
this.subSystemB = new SubSystemB();
}
public void aWork() {
this.subSystemA.doWork();
}
public void bWork() {
this.subSystemB.doWork();
}
}
class SubSystemA {
public void doWork() {
System.out.println("work");
this.go();
}
private void go() {
System.out.println("go go");
}
}
class SubSystemB {
public void doWork() {
System.out.println("sleep");
this.go();
}
private void go() {
System.out.println("back back");
}
}
class ClientFacade{
public static void main(String[] args) {
Facade facade = new Facade();
facade.aWork();
facade.bWork();
}
}