外观模式


一般来说系统之间的关联都是比较复杂的,如何管理这些关系呢,这时候就需要外观模式的协调,使客户端调用复杂的子系统变得简单,可以说外观模式是一种控制器,客户端想要用哪个功能只要熟悉外观对象提供的方法即可

IUser.java

public interface IUser {
    void WhoAreYou();
}

A.java

public class A implements IUser {
    @Override
    public void WhoAreYou() {
        System.out.println("I'm A");
    }
}

B.java

public class B implements IUser {
    @Override
    public void WhoAreYou() {
        System.out.println("I'm B");
    }
}

Facade.java

public class Facade {
    private A a;
    private B b;

    public Facade(){
        this.a = new A();
        this.b = new B();
    }

    public void showA(){
        a.WhoAreYou();
    }

    public void showB(){
        b.WhoAreYou();
    }
}

TestFacade.java

public class TestFacade {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.showA();
        facade.showB();
    }
}

Run result

I'm A
I'm B

这种做法能够减少系统之间的依赖,客户端只能先通过外观对象访问系统提高了安全性,但是这种结构型模式不符合开闭原则,即添加新的子系统时需要修比较麻烦