设计模式之外观模式(十一)

外观模式(门面模式)

简介

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

类图

实现方式

         例如公司存在4个子系统,那么如果需要调用4个系统的方法,在没有使用外观模式的情况下调用是这样的。

package com.rabbit.pattern.facade;

/**
 * Created by vip on 2018/3/28.
 */
public class SubSystemOne {

    public void one() {
        System.out.println("1号子系统方法被调用");
    }

}

package com.rabbit.pattern.facade;

/**
 * Created by vip on 2018/3/28.
 */
public class SubSystemTwo {

    public void two() {
        System.out.println("2号子系统方法被调用");
    }

}

package com.rabbit.pattern.facade;

/**
 * Created by vip on 2018/3/28.
 */
public class Demo {

    public static void main(String[] args) {
        SubSystemOne one = new SubSystemOne();
        SubSystemTwo two = new SubSystemTwo();
        one.one();
        two.two();
    }

}

这样调用子系统的方法需要分别依赖2个系统。那么如果子系统很多的情况下,系统之间的调度会变得很复杂,所有可以使用外观模式去提供一个统一的外观类接口,这样所有的调度只需要知道外观类接口就可以,降低了系统的调度复杂,因为只和外观类交互。

 

引入外观类

package com.rabbit.pattern.facade;

/**
 * Created by vip on 2018/3/28.
 */
public class Facade {

    private SubSystemOne sso;
    private SubSystemTwo sst;

    public Facade() {
        sso = new SubSystemOne();
        sst = new SubSystemTwo();
    }

    //子系统一接口
    public void one() {
        sso.one();
    }

    public void two() {
        sst.two();
    }

}
package com.rabbit.pattern.facade;

/**
 * Created by vip on 2018/3/28.
 */
public class Demo {

    public static void main(String[] args) {
        Facade f = new Facade();
        f.one();
        f.two();
    }

}

总结

优点

1)实现了子系统与客户端之间的松耦合关系。

2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

 

应用场景

(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。例如MVC架构的系统,表示层(Controller)和业务逻辑层(Service)直接的交互一般表示层都要引入多个业务逻辑层的对象并调用,这样系统的耦合度很高。如果在表示层和业务逻辑层之间使用外观模式引入逻辑层外观类,那表示层就只需要和逻辑层外观类交互这样就降低了系统的耦合度。

(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。

(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。开发外观类提供对外接口,提供遗留系统的复杂代码的简单调用,这样可以减轻开发压力。

 


展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie
应支付0元
点击重新获取
扫码支付

支付成功即可阅读