我们都知道类与类之间的耦合越低,那么可复用性就越好,如果两个类不必彼此通信,那么就不要让这两个类发生直接的相互关系,如果需要调用里面的方法,可以通过第三者来转发调用。外观模式非常好的诠释了这段话。外观模式提供了一个统一的接口,用来访问子系统中的一群接口。它让一个应用程序中子系统间的相互依赖关系减少到了最少,它给子系统提供了一个简单、单一的屏障,客户通过这个屏障来与子系统进行通信。通过使用外观模式,使得客户对子系统的引用变得简单了,实现了客户与子系统之间的松耦合。但是它违背了“开闭原则”,因为增加新的子系统可能需要修改外观类或客户端的源代码。 

Java定义外部接口API参数格式参考 java外部接口设计_后端

 

demo


 入口类

package facade_method_mod;

import org.junit.Test;

/**
 * 我们都知道类与类之间的耦合越低,那么可复用性就越好,如果两个类不必彼此通信,那么就不要让这两个类发生直接的相互关系,如果需要调用里面的方法,可以通过第三者来转发调用。外观模式非常好的诠释了这段话。外观模式提供了一个统一的接口,用来访问子系统中的一群接口。它让一个应用程序中子系统间的相互依赖关系减少到了最少,它给子系统提供了一个简单、单一的屏障,客户通过这个屏障来与子系统进行通信。通过使用外观模式,使得客户对子系统的引用变得简单了,实现了客户与子系统之间的松耦合。但是它违背了“开闭原则”,因为增加新的子系统可能需要修改外观类或客户端的源代码。
 */
public class Client {
    @Test
    public void test(){
        AnimalFacade animalFacade = new AnimalFacade();
        animalFacade.catSay();
        animalFacade.dogSay();
    }
}

外观角色 

package facade_method_mod;

/**
 * Facade: 外观角色
 */
public class AnimalFacade {
    private Cat cat;
    private Dog dog;
    public AnimalFacade(){
        this.cat = new Cat();
        this.dog = new Dog();
    }

    public void catSay(){
        cat.say();
    }

    public void dogSay(){
        dog.say();
    }


}

接口  动物

package facade_method_mod;

public interface Animal {
    public void say();
}

接口实现类 猫 

package facade_method_mod;

public class Cat implements Animal {
    @Override
    public void say() {
        System.out.println("cat say 喵喵~");
    }
}

接口实现类狗 

package facade_method_mod;

/**
 * SubSystem:子系统角色
 */
public class Dog implements Animal {
    @Override
    public void say() {
        System.out.println("Dog say 旺旺~");
    }
}