热门搜索:安全 黑客 方法 简单方法 部分 官方 国防 相信 盲目 广告 写给 科大
资讯  Java  VC/VC++  C++/C  VB.NET  C#  .Net  Delphi  VB  Python  软件测试  软件工程  汇编  ASP  ASP.NET  PHP  JSP
HTML  CSS  Xml  JavaScript  Ajax
您现在的位置:嘉文IT资讯网 >> 编程开发 >> 程序开发 >> C# >> 浏览文章
C# |
C# 用装饰模式实现蝌蚪变青蛙的过程
作者:嘉文IT资讯网 日期:2010年07月03日 来源:本站原创  【字体: 】   我要评论(5)
核心提示:    在面向对象的理论中,始终强调是抽象与组合以及一些其他面向对象的机制比如继承,封装和多态。   前面的文章都将有抽象是什么,至于抽象如何使用,就是把实现往上总结共性而去除特性,由此得到抽象层次和实现层
   在面向对象的理论中,始终强调是抽象与组合以及一些其他面向对象的机制比如继承,封装和多态。

  前面的文章都将有抽象是什么,至于抽象如何使用,就是把实现往上总结共性而去除特性,由此得到抽象层次和实现层次,所以设计模式中的基本上很多都是利用这种方法来实现面向对象的抽象,以使得软件能够降低变化带来的影响。

  我们知道C#是一种强类型的语言,也就是对象的行为在定义的时候就确定好了,如果要使用另外的行为,要么使用静态定义时期的继承机制,另外一种方法就是组合(是一种动态机制,可以在程序运行期间给对象加上行为,这就是造就个体的差异,这种和我们的发展观是符合的。实际上在设计的过程中就是一动一静相互平衡和谐。)

  接下来讲的是在动态时期给对象实例加上行为。

  故事是一只动物也就是上帝创造的一只蝌蚪,或许生下来就能游泳,然后经历一段时间的进化慢慢长成了青蛙,青蛙王子就能呼吸了。

  在Javascript动态弱类型的实现动态给对象实例加上行为是没有难度的,可是给一个对象实例加上行为在C#这种静态类型机制中,实现是有难度的,不过现在的C#支持动态属性这种方法。

  在设计模式中也有一种装饰(decorator)模式,意图是给对象增加行为。

点击浏览下一页

 

  实现的过程是先定义蝌蚪,青蛙都是一种动物类型。

namespace DecoratorPattern
{
    abstract class Animal
    {
         public abstract void Run();
    }
}

namespace DecoratorPattern
{
    class Tadpole :Animal
    {
        private Animal animal; 
        public Tadpole(Animal animal)
        {
            this.animal = animal;
        } 
        public override void Run()
        {
            Console.WriteLine("我是一只蝌蚪");
        }
    }
} 

namespace DecoratorPattern
{ 
    class Frog:Animal
    {
        private Animal animal; 
        public Frog(Animal animal)
        {
            this.animal = animal;
        } 
        public override void Run()
        {
            Console.WriteLine("我是一只青蛙"); 
        }
    }
} 

  然后游泳行为和呼吸行为也抽象为对象(在这里没有定义成接口)

namespace DecoratorPattern
{
    class Swimable : Animal
    {
        private Animal animal; 
        public Swimable(Animal animal)
        {
            this.animal = animal;
        } 
        public override void Run()
        {
            animal.Run();
            Console.WriteLine("我是能游泳的");
        }
    }
} 

namespace DecoratorPattern
{
    class Breathable : Animal
    {
        private Animal animal; 
        public Breathable(Animal animal)
        {
            this.animal = animal;
        } 
        public override void Run()
        {
            animal.Run();
            Console.WriteLine("我上岸了,我能呼吸啦.");     
        }
    }
} 

  上帝类型负责造物以及进化的过程

  这样客户端看不出后台发生了什么变化,使用静态工厂模式隐藏创建和进化的过程。这样我们的客户端代码才会看起来优美流畅(哈哈顺便把我的代码也包括了)。

namespace DecoratorPattern
{
    class God
    {
        public static Tadpole CreateKedou()
        {
            return new Tadpole(null);
        } 
        internal static Swimable FirstJinhua(Animal single)
        {
            Swimable swimable = new Swimable(new Tadpole(single));
            return swimable;
        } 
        internal static Breathable SecondJinhua(Animal single)
        {
            Breathable breathable = new Breathable(new Frog(single));
            return breathable;
        }
    }
} 

Tags:系统 | 安全 | 编程 | 数据库 | 设计 | 网络 | 通信 | 办公 | 服务器 | 软件应用
发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
上一篇:如何使用C#访问POP3服务器
下一篇:没有了
相关文章列表
·如何使用C#访问POP3服务器
·C# 用装饰模式实现蝌蚪变青蛙的过
网友评论
最新新闻
· C# 用装饰模式实现蝌蚪变青蛙的过
· 如何使用C#访问POP3服务器
推荐新闻
热门新闻

关于我们 | 联系我们 | 版权申明 | 广告服务 | 网站地图 | 免责条款

Copyright 2010-2015 Powered by jiawenit.com,嘉文网络科技开发 All Rights Reserved.
服务电话:15095181829 E-Mail:suijiawen@163.com
售前咨询服务QQ:点击这里给我发消息 售后服务技术支持QQ: 点击这里给我发消息点击这里给我发消息