美文网首页
外观模式-java

外观模式-java

作者: JW2015 | 来源:发表于2022-01-19 17:44 被阅读0次

    概念:

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

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

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

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

    结构:

    外观(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

          本文链接:https://www.haomeiwen.com/subject/kpvrhrtx.html