使用面向对象重构之-把抽象控制在一处:提高内聚性
  TEZNKK3IfmPf 7天前 15 0
承接上文 使用面向对象重构之-使用接口抽象完成不同维度的扩展。
本文所介绍的内容可能不是面向对象编程所特有的,在其他编程(函数式或过程式)中也会常用的技巧——使用统一的抽象。上文遗留的问题就是,太多类型的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原则其实是相辅相成的,当代码重复时,就意味要创建抽象来集中管理某信息;当代码缺乏集中信息管理时,就难免出现重复(调用)。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 7天前 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月26日   42   0   0 面向对象Scala
  TEZNKK3IfmPf   2023年11月15日   22   0   0 面向对象java
  TEZNKK3IfmPf   2023年11月15日   51   0   0 面向对象java
TEZNKK3IfmPf