使用面向对象重构之-把抽象控制在一处:提高内聚性
来源:互联网 发布:婚礼现场互动软件 编辑:程序博客网 时间:2024/06/05 23:05
承接上文 使用面向对象重构之-使用接口抽象完成不同维度的扩展。
本文所介绍的内容可能不是面向对象编程所特有的,在其他编程(函数式或过程式)中也会常用的技巧——使用统一的抽象。上文遗留的问题就是,太多类型的Staff要创建:
问题来了,哪个类要做这件事情?如果没有类来做这件事情的话,将会所有调用者的责任,即创建对象的代码(new XXStaff())将会到处都是。这看起来并不是我们想要的。一种普遍的方案就是使用工厂模式来统一管理对象的创建。
本文只是以对象的创建为例,来说明一个重要的原则:信息的统一管理,即确保每件事只在一个地方做,可以是行为或是数据。DRY和information expert原则其实是相辅相成的,当代码重复时,就意味要创建抽象来集中管理某信息;当代码缺乏集中信息管理时,就难免出现重复(调用)。
本文所介绍的内容可能不是面向对象编程所特有的,在其他编程(函数式或过程式)中也会常用的技巧——使用统一的抽象。上文遗留的问题就是,太多类型的Staff要创建:
public class StaffBase{...}public class LocalStaff :StaffBase{public Staff(ITransportClaim transportClaimProvider){...}}public class OTStaff: LocalStaff{public class OTStaff(ITransportClaim transportClaimProvider, IOverTimeFoodClaim otClaimProvider): base(transportClaimProvider){...}}public class TravelStaff :StaffBase{public class TravelStaff(ITravelClaim travelClaimProvider){}}
问题来了,哪个类要做这件事情?如果没有类来做这件事情的话,将会所有调用者的责任,即创建对象的代码(new XXStaff())将会到处都是。这看起来并不是我们想要的。一种普遍的方案就是使用工厂模式来统一管理对象的创建。
...public interface IStaffFactory<T> where T: StaffBase{T CreateStaff();}public class StaffFactory: IStaffFactory<LocalStaff>{public LocalStaff CreateStaff();}public class TravelStaff: IStaffFactory<TravelStaff>{public TravelStaff CreateStaff();}...
本文只是以对象的创建为例,来说明一个重要的原则:信息的统一管理,即确保每件事只在一个地方做,可以是行为或是数据。DRY和information expert原则其实是相辅相成的,当代码重复时,就意味要创建抽象来集中管理某信息;当代码缺乏集中信息管理时,就难免出现重复(调用)。
1 0
- 使用面向对象重构之-把抽象控制在一处:提高内聚性
- 使用面向对象重构之-使用接口完成行为抽象
- 使用面向对象重构之-使用接口抽象完成不同维度的扩展
- 使用面向对象重构之-继承中的抽象—模板方法
- 面向对象之抽象
- 使用面向对象重构之-依赖注入
- 使用面向对象重构之-从过程式设计到面向对象
- 面向对象之抽象类
- 面向对象之抽象方法
- 谈谈面向对象 之 抽象
- 面向对象编程之抽象
- 面向对象之抽象类
- JAVA面向对象之抽象
- 面向对象之抽象类
- 面向对象之抽象abstract
- 面向对象之抽象过程
- 从抽象到模式——面向对象之旅(一)、抽象的魅力
- [提高总结一]js面向对象
- C/C++中赋值语句返回值
- 模板化vs模板特化vs模板偏特化
- Android Studio获取MD5和SHA1值
- 多态+菱形虚拟继承(下)
- Codeforces 359D 想法
- 使用面向对象重构之-把抽象控制在一处:提高内聚性
- 图像空间域滤波
- 分布式追踪系统资源
- deeplearning 打卡第三天_深度学习趋势_2
- 作用域解析及作用域链
- git clone github分支太慢如何解决?
- IO流_合并流读取多个文件的内容复制到一个文件中
- C++基础4:构造函数、析构函数、拷贝构造函数、静态成员函数
- Servlet 工作原理解析