外观模式:为子系统提供一个统一的入口(外观类),使客户端(调用子系统的一端)和子系统之间解耦,客户端调用子系统时只需要与外观类交互即可;官方定义:为子系统中的一组接口提供一个统一的入口,外观模式定义了一个高层接口,这个接口使的子系统更加容易使用。
eg:如图用户1和用户2执行功能1~功能3,此时他们需要分别访问三个功能子系统,这样系统的耦合度就特别高。
如果我们使用外观模式,即为用户提供一个一个统一的入口
这样用户只需要和外观类交互,从而降低了用户与子系统的耦合度。
/**子系统1**/
interface SubSystem1{
public void fun1();
}
class System1 implement SubSystem1{
public void fun1(){
System.out.println("功能1");
}
}
/**子系统2**/
interface SubSystem2{
public void f1();
}
class System2 implement SubSystem2{
public void f1(){
System.out.println("System2:功能1");
}
/**外观类**/
class FacadeClass{
private System1 system1 = new System1();
private System2 system2 = new System2();;
public void facade(){
system1.fun1();
system2.f1();
}
}
/**用户**/
public class User{
public static void main(String[]args){
new Facade().facade();
}
}
由此,外观模式的角色如下:
1)、外观角色(Facade):外观类知道子系统的功能与职责,将客户端的请求分配到相应的子系统去处理;
2)、子系统角色:子系统是一个或多个类的集合,子系统可以被客户直接调用,也可以被外观角色调用,它处理由外观类传递过来的请求;