java设计模式|门面模式

门面模式

模式定义:

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

package facade;

public class FacadeTest {
    public static void main(String[] args) {

    }
}

class Client1{
    SubSystem1 subSystem1 = new SubSystem1();
    SubSystem2 subSystem2 = new SubSystem2();
    SubSystem3 subSystem3 = new SubSystem3();

    public void doSomething1(){
        subSystem1.method1();
        subSystem2.method2();
        subSystem3.method3();
    }
}


class Client2{
    SubSystem1 subSystem1 = new SubSystem1();
    SubSystem2 subSystem2 = new SubSystem2();
    SubSystem3 subSystem3 = new SubSystem3();

    public void doSomething2(){
        subSystem1.method1();
        subSystem2.method2();
        subSystem3.method3();
    }
}

 
class SubSystem1{
    public void method1(){
        System.out.println("SubSystem1");
    }
}

class SubSystem2{
    public void method2(){
        System.out.println("SubSystem2");
    }
}

class SubSystem3{
    public void method3(){
        System.out.println("SubSystem3");
    }
}

使用门面模式写法

package facade;



public class FacadeTest {
    public static void main(String[] args) {
        
    }
}

class Client1{
    Facade facade = new Facade();

    public void doSomething1(){
        facade.doSomethingFacade();
    }
}


class Client2{

    Facade facade = new Facade();
    public void doSomething2(){
        facade.doSomethingFacade();
    }
}

class Facade{
    SubSystem1 subSystem1 = new SubSystem1();
    SubSystem2 subSystem2 = new SubSystem2();
    SubSystem3 subSystem3 = new SubSystem3();

    public void doSomethingFacade(){
        subSystem1.method1();
        subSystem2.method2();
        subSystem3.method3();
    }
}


class SubSystem1{
    public void method1(){
        System.out.println("SubSystem1");
    }
}

class SubSystem2{
    public void method2(){
        System.out.println("SubSystem2");
    }
}

class SubSystem3{
    public void method3(){
        System.out.println("SubSystem3");
    }
}

应用场景

1.当您需要使用复杂子系统的有限但是直接的接口时,请使用Facade模式

2.当您想要将子系统组织层时,请使用Facade

优点:

简化客户端的调用

源码中的经典应用

1.org.apache.Catalina.connector.RequestFacade