思考题
想想看,你在 JavaAPI 中遇到过哪些外观,你还心愿 Java 可能新增哪些外观?P262
println
、log 日志接口、JDBC 接口- 忽然让想感觉想不进去,各种 API 都用得挺顺的,没有太麻烦的应用
外观模式
提供了一个对立的接口,用来拜访子系统中的一群接口。外观定义了一个高层接口,让子系统更容易应用。P264
特点
- 提供简化的接口的同时,仍然将零碎残缺的性能裸露进去
P260
- 将客户从组件的子系统中解耦
P260
- 用意是提供子系统的一个简化接口
P260
区别 P270
- 适配器模式:将一个对象包装起来以扭转其接口
- 装璜器模式:将一个对象包装起来以减少新的行为和责任
- 外观模式:将一群对象“包装”起来以简化其接口
设计准则
起码常识准则:只和你的密友谈话。即缩小对象之间的交互,缩小类的耦合。P265
长处
- 缩小软件的保护老本
P267
毛病
- 导致制作更多的“包装”类
P267
- 导致减少复杂度和开发工夫
P267
- 升高运行时的性能
P267
遵循起码常识准则的方针
对于任何对象,在该对象的办法内,咱们只应该调用属于以下范畴的办法:P266
- 该对象自身
- 被当作办法的参数而传递进来的对象
- 此办法所创立或实例化的任何对象
- 对象的任何组件
由前三条可知:不要调用其余办法返回后果的办法
思考题
这些类有没有违反起码常识准则?请阐明起因。P268
public class House {
WeatherStation station;
// 其余的办法和结构器
public float getTemp() {return station.getThermometer().getTemperature();}
// 违反了起码常识准则
// 调用了办法返回后果的办法
}
public class Houst {
WeatherStation station;
// 其余的办法和结构器
public float getTemp() {Thermometer thermometer = station.getThermometer();
return getTempHelper(thermometer);
}
// 没有违反起码常识准则
// 只调用了对象的组件以及对象自身的办法
public float getTempHelper(Thermometer thermometer) {return thermometer.getTemperature();
}
// 只调用了参数
}
所思所想
- 大部分接口性能的封装应该都算应用了外观模式。比如说下单操作,对外只裸露了一个下单接口,但外部其实有大量的子组件调用(购物车接口、运费计算接口、优惠券接口、地址接口、下单中间件、物流接口等)。再比方一个简略
println
,外部就蕴含了并发管制、异样捕捉、调用BufferedWriter
对象进行输入管制等。
本文首发于公众号:满赋诸机(点击查看原文)开源在 GitHub:reading-notes/head-first-design-patterns