背景:
妹子拍照后需要修图,磨皮、瘦脸、大眼等等一系列操作,一修一个小时,急需一键美化(涵盖所有功能)。
设计:
改变接口的原因是为简化接口
最少知识原则:只和你的密友谈话。
实现:不要让太多的类耦合在一起,免得修改系统中的一部分,会影响到其他部分。
优点:省去很多维护成本,不会因为太复杂而不容易被其他人了解。
方针:只应该调用属于以下范围的方法:
- 该对象本身
- 被当作方法的参数而传递进来的对象
- 此方法所创建或实例化的任何对象
- 对象的任何组件
// 不采用这个原则
public float getTemp() {
Thermometer ther = station.getThermometer();
return ther.getTemperature(); // 不应该调用在从温度计对象中取得温度
}
// 采用这个原则
public float getTemp() {
return = station.getTemperature(); // 在气象站中提供温度
}
当然这个原则也有缺点:它会导致更多的“包装”类被制造出来(提供温度),以处理和其他组件的沟通,这可能会导致复杂度和开发时间的增加,并降低运行时的性能。
最常用的违反这个原则的地方:System.out.println() (哈哈哈哈哈,没想到吧。)
实现:
把所有需要的接口包装成一个简单的接口,方便用户调用,太简单就不想写了。
总结:
外观模式:提供一个统一的接口,用来访问自系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
外观模式提供简化接口的同时,依然将系统完整的功能暴露出来,以供需要的人使用。
注意外观模式和适配器模式的区别,两种模式的差异不在于包装了几个类,而在于意图,前者是为子系统提供一个简化的接口,而后者是为了改变接口符合客户的期望。
外观模式不只是简单了接口,它也将客户从组件的子系统解藕出来。