在编蝌蚪变青蛙代码过程中,考虑的是蝌蚪变青蛙的进化过程,也就是想的是如何从一种类型转化成另外一种类型的C#实现方案。
根据网友的反馈Swimable, Breathable 直接继承Animal不妥,实际上在编码的过程中也考虑这个问题,只是没有想要完善整个代码。
因此有必要对前面的代码的不合理性进行修改或者用时髦的话来讲重构现在的代码。
首先将Swimable和Breathable 分别重名为SwimableAnimal和BreathableAnimal。主要是考虑到网友所讲的名称的不符合继承规范问题。
然后分别对Swimable和Breathable行为进行抽象得出两个接口ISwimable以及IBreathable.重构后的类结构图如上。
客户端调用这个类库的代码不变。
namespace DecoratorPattern
{
class Program
{
static void Main(string[] args)
{
// 上帝制造了蝌蚪
var single = God.CreateKedou();
// 蝌蚪一生下来就能游泳
var swimable = God.FirstJinhua(single);
// 蝌蚪展现游泳的本领
swimable.Run();
// 蝌蚪进化成青蛙
var breathable = God.SecondJinhua(single);
// 青蛙可以呼吸
breathable.Run();
//
Console.ReadKey();
}
}
}
当然也可以变为下面的代码,变成面向接口编程。
namespace DecoratorPattern
{
class Program
{
static void Main(string[] args)
{
// 上帝制造了蝌蚪
var single = God.CreateKedou();
// 蝌蚪一生下来就能游泳
var swimable = God.FirstJinhua(single);
// 蝌蚪展现游泳的本领
swimable.Swim();
// 蝌蚪进化成青蛙
var breathable = God.SecondJinhua(single);
// 青蛙可以呼吸
breathable.Breath();
//
Console.ReadKey();
}
}
}