我有一个现有的类层次结构,我无法修改
即系统发育树:
base
├── animal
│ ├── invertebrate
│ └── vertebrate
│ ├── amphibian
│ ├── bird
│ ├── fish
│ ├── mammal
│ └── reptile
└── plant
我需要为该层次结构中的对象构建一个函数库,即打印函数:
print_mammal_A()
print_mammal_B()
print_fish_A()
print_vertebrate_A()
print_vertebrate_B()
print_animal_A()
这些功能将根据需要进行开发。
每个类可能有多个函数。
显而易见的解决方案是制作一个映射目标层次结构的包装类层次结构。每个包装器实现它自己的功能,即:
class base_wrapper(){
base * base_ptr;
}
class animal_wrapper : base_wrapper{
void print_animal_A();
}
class vertebrate_wrapper : animal_wrapper {
void print_vertebrate_A();
void print_vertebrate_B();
}
我想知道允许以下任一项目的设计模式:
删除包装器继承(这样库开发人员就不需要知道目标类基)
为目标类自动包装最专业的包装器(因此库用户不需要知道目标类基)
我对 C# 或 C++ 解决方案感兴趣。不确定是否存在可以在其中一个而不是另一个中轻松实现的模式。
最佳答案
我假设你不能自己修改库,所以你不能为每个类添加方法?
如果我理解正确,我认为您可以使用扩展方法。在 C# 中,它会是这样的。
public static class FishExtension
{
public static void Print(this Fish fish)
{
// Now you can work with the fish object.
}
}
然后 fish 的用户将能够:
Fish fish = new Fish();
fish.Print();
这样就没有额外的层次结构(没有包装器) 扩展类从未直接使用,用户只需导入其命名空间。
请参阅扩展方法(C# 编程指南) https://msdn.microsoft.com/en-us//library/bb383977.aspx
关于c# - 适用于预先存在的类层次结构的函数的最佳模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35931039/