本文承接上文 使用面向对象重构之-继承中的抽象—模板方法。
public class Employee { ... private void CommonSteps() { ... } public void Claim() { CommonSteps(); ExtraSteps(); } public virtual void ExtraSteps() { ... } } public class Manager : Employee { public override void ExtraSteps() { ... } }
public class Employee { private void CommonSteps() { // ... } public virtual void Claim() { CommonSteps(); ExtraSteps(); } public virtual void ExtraSteps() { // ... } } public class Manager : Employee { public override void ExtraSteps() { // ... } } public class Sales : Employee { public override void ExtraSteps() { // do nothing } public override void Claim() { // sales Claim Logic } }
public interface IClaim { void Claim(); } public class StaffClaimProvider : IClaim { public void Claim() { throw new NotImplementedException(); } } public class SalesClaimProvider : IClaim { public void Claim() { throw new NotImplementedException(); } } public class Employee { private readonly IClaim _claimProvider; public Employee() { } public Employee(IClaim claimProvider) { _claimProvider = claimProvider; } public void Claim() { _claimProvider.Claim(); } } public class Manager : Employee { public Manager(IClaim claim) : base(claim) { } } public class Sales : Employee { public Sales(IClaim claim) : base(claim) { } }