我有3类:如何解决这个重复代码+添加另一种方法
class First {
public void SetA(){ ... }
public void SetB(){ ... }
public void SetC(){ ... }
public void SetD(){ ... }
public void SetZ(){ ... }
}
class Second {
public void SetC(){ ... }
public void SetD(){ ... }
public void SetE(){ ... }
public void SetF(){ ... }
public void SetX(){ ... }
}
class Third{
public void SetA(){ ... }
public void SetB(){ ... }
public void SetE(){ ... }
public void SetF(){ ... }
public void SetY(){ ... }
}
正如你所看到的,我在同样的方法重复的代码。
昨天我意识到,有时候我想在每种方法中添加另一个推荐。
所以我正在寻找解决这两个问题的方法。一个解决方案,我想的是:
创建接口:
interface IAllMethods { void SetA(); void SetB(); void SetC(); void SetD(); void SetE(); void SetF(); void SetX(); void SetY(); void SetZ(); }
创建默认的实现:
class DefaultAllMethods { public void SetA(){ ... } public void SetB(){ ... } public void SetC(){ ... } public void SetD(){ ... } public void SetE(){ ... } public void SetF(){ ... } public void SetX(){ ... } public void SetY(){ ... } public void SetZ(){ ... } }
,以增加额外的命令,使用Decorator模式创建另一个实施:
class ExtraAllMethods { private IAllMethods _allMethods; public ExtraAllMethods (IAllMethods allMethods) { _allMethods=allMethods; } public void SetA(){ _allMethods.SetA(); extraMethod(); } public void SetB(){ _allMethods.SetB(); extraMethod(); } public void SetC(){ _allMethods.SetC(); extraMethod(); } .. .. .. }
在类First,Second和Third中使用欲望实现。例如:
class Third{ private IAllMethods _allMethods; public Third(IAllMethods allMethods) { _allMethods=allMethods; } public void SetA(){ _allMethods.SetA(); } public void SetB(){ _allMethods.SetB(); } .. .. .. }
你怎么看待这个解决方案是什么?这种需求有更好的设计吗?
UPDATE
人们索要真正的业务,所以这里是: 我有3种类型的传输:TransmissionA,TransmissionB,TransmissionC 每个传输有很多参数(成员或属性)。例如,TransmissionA具有WorkerId,CustomerId,MessageName等。 TransmissionB具有WorkerId和MessageName但不包含CustomerId。 TransmissionC具有WorkerId,CustomerId但没有MessageName。这些仅仅是示例 - 在我的情况下,每次传输都有更多的属性。每个属性都有Set方法。
现在有一个新的需求。系统某处有一个称为“更新任务”的选项。如果选项为ON,那么我需要在每个Set方法中更新相关任务。这就是为什么我想到装饰模式。
为什么您使用的方法,而不是设置属性? –
只需用该方法声明一个抽象类并继承该类即可。然后您可以简单地覆盖该方法。如果班级没有使用它,则不要使用它或覆盖它。 –
这些类是否可以互换?换句话说,它就像狗和猫一样,虽然不同,但都可以走路和咬人?我试图准确理解他们是怎么做的以及他们如何相互关联。 – NotMe