【发布时间】:2015-03-24 09:29:01
【问题描述】:
假设您有多个类型,每个类型代表一个字段集合。 每种类型的字段不同,但有些类型共享一些字段。
让我们考虑一下冰淇淋类型。所有 IceCream 类型都实现了一个公共接口,该接口要求公开一个方法 getFlavor()。但是,每种 IceCream 类型还公开了其他几种方法。 IceCream 类型包括 Gelato、WaterIce、FrozenCustard、ChilledCream 和 Traditional
某些 IceCream 类型公开了获取制造商的方法,但其他 IceCream 类型没有制造商,因此不公开获取制造商的方法。
此外,IceCream 类型不会以相同的方式公开 getManufacturer() 方法 - 有些人称之为 getManufacturer(),而另一些人称之为 getMaker()、getChef() 或 getOwner()。此外,单个 IceCream 类型可能有多个单独的方法,每个方法返回相同(或不同)的制造商。
给定一组 IceCream 类型,其中一些具有返回制造商的方法(制造商将始终是相同的数据类型)如何抽象这些 IceCream 类型,以便他们可以编写通用逻辑来处理 IceCream 类型复制用于分别检索每种 IceCream 类型的制造商的所有代码?
很遗憾,这些类无法修改。
这似乎需要某种类型的枚举,其中包含从 Type -> String 的映射,并且 Strings 用于反射性地解析类方法。是否有另一种通用的方法来实现这一点?
【问题讨论】:
-
我建议你使用装饰器模式。对于每种类型的冰淇淋,您需要创建一个 IceCreamDecorator。装饰器将实现两个接口,即 IIceCream 和 IIceCreamManufactor,并将冰淇淋作为内部类传递。 IIceCreamManufactor 有一个方法是 getManufactor,因此它将封装内部类的 getMaker()、getChef() 或 getOwner()。这样您就不会更改现有代码,并且可以随意扩展装饰器。
-
如果你喜欢它..我可以用它创建一个新答案并将其标记为答案吗?:P只是想得到一些积分!
-
当然!我认为这是一个不错的答案 - 使用装饰器来包含损坏的抽象
标签: java oop design-patterns abstraction