• C# 用装饰模式实现蝌蚪变青蛙的过程续


    在编蝌蚪变青蛙代码过程中,考虑的是蝌蚪变青蛙的进化过程,也就是想的是如何从一种类型转化成另外一种类型的C#实现方案。

    根据网友的反馈Swimable, Breathable 直接继承Animal不妥,实际上在编码的过程中也考虑这个问题,只是没有想要完善整个代码。

    因此有必要对前面的代码的不合理性进行修改或者用时髦的话来讲重构现在的代码。

    首先将Swimable和Breathable 分别重名为SwimableAnimal和BreathableAnimal。主要是考虑到网友所讲的名称的不符合继承规范问题。

    image

    然后分别对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();
            }
        }
    }

  • 相关阅读:
    shell中的 echo命令
    shell中的运算符
    shell中的替换
    shell中的元字符
    springcloud-sleuth的使用
    springcloud-sleuth之zipkun运行和概念介绍
    springcloud-sleuth是什么
    消息总线(bus)和消息驱动(stream)的区别
    springcloud-stream之持久化
    springcloud-stream之消费者重复消费
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1768968.html
Copyright © 2020-2023  润新知