Java学习-设计模式-外观模式

61 篇文章 0 订阅
48 篇文章 1 订阅

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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值