zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }

  • 相关阅读:
    封装好的AFN网络请求框架和MBProgress
    iOS定时器的使用
    iOS去除导航栏和tabbar的1px横线
    移动端加解密
    改变字符串中部分字符传的字体大小和颜色
    关于NSLog
    ipad开发:二维码扫描,摄像头旋转角度问题解决办法
    iOS-图文表并茂,手把手教你GCD
    计算富文本的高度
    jsp打印
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1768968.html
Copyright © 2011-2022 走看看