美文网首页
2022-10-05-适配器和外观模式

2022-10-05-适配器和外观模式

作者: 三流之路 | 来源:发表于2022-10-06 10:07 被阅读0次

    适配器模式,也是比较熟悉,最近两个系统整合的时候还用到了,不过这次看书,发觉我过去用的都是对象适配器,就是通过构造函数传递要被转换的类。

    还有个叫类适配器,继承需要被转换的类。思想是一样,只是这样如果要转换多个,因为 Java 不支持多继承,就只能用构造函数了。再回过头看《Head First 设计模式》,原来也讲了,但是毫无印象,当年大概看到 Java 不能用,就没怎么看。

    还有个外观模式(门面模式),和对象适配器很像,用来简化接口,让调用者和具体子类解耦,就是原来外面要做一件事,要调用多个对象的各种方法。

    public class Client {
        public void test(A a, B b, C c) {
            a.do1();
            int r = a.do2();
            b.do1();
            b.do2(r);
            c.do();
        }
    }
    

    如果很多地方都需要这一套逻辑,一般直接在类内部提取一个方法,如果在许多类里都用,可能写到一个静态方法去了。

    而外观模式是写一个专门的类封装

    public class ABC {
        A a;
        B b;
        C c;
        public ABC(A a, B b, C c) {
            // 赋值
        }
    
        public void doSth() {
            a.do1();
            int r = a.do2();
            b.do1();
            b.do2(r);
            c.do();
        }
    }
    
    public class Client {
        public void test(A a, B b, C c) {
            ABC abc = new ABC(a, b, c);
            abc.doSth();
        }
    }
    

    一定要说出好处,就是封装后,Client 只需要和 ABC 打交道,符合什么最少知识原则之类的。如果要修改 doSth 的调用逻辑,对 Client 透明,ABC 自己修改就行。

    但好像也没什么,封装方法同样是这效果。并且如果仅仅是一个地方调用,那都是一样,要修改了,不是修改 Client 就是要修改 ABC,也没省事,而且作为方法内部逻辑,Client 修改也影响不了它自己的其它部分。

    看到有一个好处,说是风格问题,这可以接受,Client 的风格可以一致,要修改都到 ABC 去修改,好处还是有的,起码在 ABC 里改比在 Client 里改动看着清爽,因为 ABC 代码逻辑简单。


    装饰者是一种包装,是从一个接口的根子上下来,是扩展它兄弟的功能。

    适配器也是对类的包装,但是从两个根子上下来,把一个转成另一个。

    外观是对类的包装,提供一个方法,封装好了算法流程。

    装饰适配器外观.png

    相关文章

      网友评论

          本文标题:2022-10-05-适配器和外观模式

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