2022-10-05-适配器和外观模式
模式 2022 10 05 适配器 外观
2023-06-13 09:13:50 时间
适配器模式,也是比较熟悉,最近两个系统整合的时候还用到了,不过这次看书,发觉我过去用的都是对象适配器,就是通过构造函数传递要被转换的类。
还有个叫类适配器,继承需要被转换的类。思想是一样,只是这样如果要转换多个,因为 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
相关文章
- EasyGBS平台配置非按需拉流模式后,视频一直加载无法播放该如何解决?
- 十四、装饰器模式 ( Decorator Pattern )
- 成果被他人窃取_工作窃取模式
- 2022-10-04-装饰者模式与策略模式
- 2022-10-06-迭代器和组合模式
- 【2022新书】C++软件设计:高质量软件的设计原则和模式
- 缩短汽车服务行业企业供销链,经销商系统打造企业销售新模式
- 敏捷开发模式下如何快速提升产品质量
- 基于UiAutomator2+PageObject模式开展APP自动化测试实战
- 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
- 苹果将推出新安全功能“封锁模式”,可保护设备免受间谍软件攻击
- Oracle无空格:新模式下的数据库管理(oracle去掉空格)
- Linux进入单用户模式:一步一步指引(linux进去单用户模式)
- Linux下如何进入单用户模式(linux启动单用户模式)
- 平头哥发布重磅新品“无剑”,要用“平头哥模式”打破现有芯片设计限制
- 了解Linux的几种模式:掌握系统配置与调试方法(linux几种模式)
- Vim 模式介绍
- 数据库高可用MySQL一主一从模式下的优化策略(mysql一主一从模式下)
- Oracle 数据库管理监听模式介绍(oracle中监听模式)
- 红色的群体Redis集群的个性模式(redis集群的个个模式)
- 关于phpmvc开发模式的感想