外观模式-java

概念:

又称门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

外观模式“迪米特法则”的典型应用。

结构:

外观(Facade)角色:为多个子系统对外提供一个共同的接口。
子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。

实现案例:

以实现一个系统的简单架构为例,客户端需要使用三个子系统(HttpRequest、ImageLoader、Common)提供的功能方法,这里用外观类(Facade),对这些子系统进行委托调用。

//子系统1
public class HttpRequest {
    public void init() {
        System.out.println("初始化... HttpRequest");
    }

    public void request() {
        System.out.println("执行网络请求... http");
    }
}
//子系统2
public class ImageLoader {
    public void init() {
        System.out.println("初始化... ImageLoader");
    }

    public void load() {
        System.out.println("加载图片...image");
    }
}
//子系统3
public class Common {
    public void init() {
        System.out.println("初始化... Common");
    }

    public void method() {
        System.out.println("执行公共方法... common");
    }
}
//外观类
public class Facade {
    private Common common;
    private HttpRequest httpRequest;
    private ImageLoader imageLoader;

    public Facade() {
        common = new Common();
        httpRequest = new HttpRequest();
        imageLoader = new ImageLoader();
    }

    public void init() {
        common.init();
        httpRequest.init();
        imageLoader.init();
    }

    public void httpRequest() {
        httpRequest.request();
    }

    public void loadImage() {
        imageLoader.load();
    }

    public void commonMethod() {
        common.method();
    }
}
public class Test {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.init();
        System.out.println(">>>>>>>>>>>>>>>>>");
        facade.httpRequest();
        facade.commonMethod();
        facade.loadImage();
    }
}

系统设计常用的一种模式,案例中Facade聚合了各个子系统,并对子系统的功能方法对外提供了统一的封装。

优点:

1、减少系统相互依赖。
2、提高灵活性。
3、提高了安全性。

缺点:

不符合开闭原则,修改起来很麻烦。

使用场景:

1、当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
2、当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。

你可能感兴趣的:(外观模式-java)