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