Java学习-设计模式-外观模式
概述:
外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。通过向现有的系统添加一个接口,来隐藏系统的复杂性。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
**缺点:**不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
理解:
这个理解很简单,还是以水果店为例,水果店需要进多种水果,比如橘子、苹果、香蕉等等。假设每种水果都分散开来,那么店老板就需要分别去每个地方进货(调用不同的对象执行不同的方法)
外观模式就是:增加一个水果代理商,这个代理商去每个水果生产地进货(包含各种水果类),然后店老板只需要找代理商进货就好了,而不需要在意水果从哪里来(不需要在意水果对象怎么创建)。
代理商需要提供给店老板各种进水果的方法,然后根据店老板想要进的水果去实现即可。
1. 首先创建水果进货接口A,包含进货方法
2. 然后创建对应的水果进货方法类A1、A2,实现接口A,重写进货方法
3. 创建外观类(代理商),包含类型为实现类A1和A2 的属性,在无参构造方法中使用对应的实现类去初始化对象,再创建给店老板调用的购买水果的方法
4. 测试,定义代理商的类,假装自己是店老板,去调用代理商给店老板进货的方法。
示例:
package Practices.Mode.Facade_Pattern;
// 1. 首先创建水果进货接口A,包含进货方法
public interface Fruit_Purchase {
public void Purchase();
}
package Practices.Mode.Facade_Pattern;
// 2. 然后创建对应的水果进货方法类,实现接口A,重写进货方法
public class Apple_Purchase implements Fruit_Purchase {
public void Purchase() {
System.out.println("代理商去苹果生产地购买苹果");
}
}
package Practices.Mode.Facade_Pattern;
// 2. 然后创建对应的水果进货方法类,实现接口A,重写进货方法
public class Orange_Purchase implements Fruit_Purchase {
public void Purchase() {
System.out.println("代理商去橘子生产地购买橘子");
}
}
package Practices.Mode.Facade_Pattern;
// 3. 创建外观类(代理商),包含类型为实现类A1和A2 的属性,在无参构造方法中使用对应的实现类去初始化对象,再创建给店老板调用的购买水果的方法
public class Purchase_Agent {
private Fruit_Purchase apple;
private Fruit_Purchase orange;
public Purchase_Agent() {
apple = new Apple_Purchase();
orange = new Orange_Purchase();
}
public void getApple(){
System.out.println("店老板想要苹果");
apple.Purchase();
System.out.println("代理商将苹果卖给店老板");
}
public void getOrange(){
System.out.println("店老板想要橘子");
orange.Purchase();
System.out.println("代理商将橘子卖给店老板");
}
}
package Practices.Mode.Facade_Pattern;
// 4. 测试,定义代理商的类,假装自己是店老板,去调用代理商给店老板进货的方法。
public class test_main {
public static void main(String[] args) {
Purchase_Agent agent = new Purchase_Agent();
agent.getApple();
System.out.println("----------------");
agent.getOrange();
}
}