• C#设计模式(学习笔记[01])


    C#设计模式(学习笔记[01]

    注意,这里讨论的设计模式都在C#中的。

    一个设计模式的目的代表了一个需求,而这个需求是C#语言提供的一般机制所无法满足的, 例如,C#语言对定义一个类所实现的接口提供了充分的支持,但是如果你希望改变一个类的接口来满足客户的需求,那么你就必须应用适配模式(Adapter),然而,C#语言的接口机制并没有提供适配器模式。

    本书《C#设计模式》把设计模式分为以下5类:

    接口型模式(Interfaces

    职责型模式(Responsibility

    构造型模式(Construction

    操作型模式(Operations

    扩展型模式(Extensions

    根据模式目的对模式进行分类

    目的

    模式

    接口

    适配器模式,外观模式,合成模式,桥接模式

    职责

    单件模式,观察者模式,中介模式,代理模式,职责链模式,享元模式

    构造

    生成器模式,工厂方法模式,抽象工厂模式,原型模式,备忘录模式

    操作

    模板方法模式,状态模式,策略模式,命令模式,解释模式

    扩展

    装饰模式,迭代模式,访问模式

    模式是人类智慧的结晶,它提供了标准的习惯用语,这些习惯用语定义了相关领域中,定有经验的实践者们所应用的概念。

     

    接口型模式介绍

    抽象的说,一个类的接口(interface)是这个类的某些方法(method)和字段(field)构成的一个集合。其它类的实例可以通过这个集合对这个类进行访问。接口通常表达了方法执行所提供的功能职责。

    C#语言改进了接口的概念,使之可以单独进行构造,从而把接口(即:一个类必须做什么)和实现(implementation,即:一个对象如何满足其功能职责)有效地区分开。

    C#中,一个类可以实现多个接口,同时,接口可以充许被多个类实现(即多个类实现同一个功能)。

    接口与抽象类:

    接口与抽象类的几点区别:

    在使用上,一个没有提供抽象方法的抽象类与一个接口是类似的(没看明白的请再重新读一遍)。然而我们要注意以下几点区别:

    1.              一个类可能实现多个接口,但是最多只能对一个抽象类进行子类化。即C#里不支持多态,然而你可以用接口进行弥补。

    2.              一个抽象类可以包括非抽象的方法,而一个接口的所有方法在效果上都是抽象的。

    3.              一个抽象类可以声明并使用变量,而一个接口不能。

    4.              一个抽象类的方法的访问修饰可以是任意的(public, internal, protected, protected internal, private),然而一个接口的访问修饰符只能是public,而且你不能指定,只能是默认的public

    5.              一个抽象类可以定义构造函数,而一个接口不行。

     

    接口与委托

    一个C#接口可以包容方法,C#属性(property),以及索引器(index)。一个接口也可以包容事件,但不能包容委托。为什么?

    关于C#里的委托,请参考这篇文章。

    http://www.cnblogs.com/WuCountry/archive/2006/11/29/576030.html

     

    接口与属性

    C#的属性是依懒于语法的。说明一下C#的属性语法:

    public int Age{

           get{return this._age;}

           set{

    if(value>=20&&value<=100) this._age=value;

    else throw new Exception(“Out of age range.”);

    }

    }

    上面的属性定义完全是基于C#语法的,经过编译器编译后,会在类上添加两个函数,一个用于get_Age,另一个是set_Age,因此当你用工具查看编译后的IL代码时,不要感到奇怪(因为我遇到过对此不理解的人,还以为是.netBUG,所以在这里多次一举的解释一下)。

     

    接口的细节

    如果你觉得你对C#的接口已经很了解的,可以跳过这里,否则请试着判断以下问题是否正确:

    1.              一个接口定义了一个合约。

    2.              接口可以包容方法,C#属性,委托及索引器。

    3.              一个接口声明至少声明一个成员。

    4.              所有接口成员默认的访问类型都是public的。

    5.              你可以自己定义接口的访问类型,即可以添加成员修饰符(modifier)。

    6.              与一个非抽象类类似,一个抽象类必须提供接口中所有成员的实现,只要这些成员在这个类的基中出现过。

     

    普通接口无法提供的内容

    每一个设计模式的目的是:在一个特定的语境(context)中解决一个问题。基于接口的模式强调了语境,因为语境决定了我们是否需要定义或者重新定义对方法的访问手段。

    接口型模式是其它几种模式的基础,慢慢学习。

     

     

  • 相关阅读:
    jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用
    php课程 5-19 php数据结构函数和常用函数有哪些
    如何解决计算机显示文字乱码
    NSURLConnection使用
    UOJ #5. 【NOI2014】动物园 扩大KMP
    [ACM] n划分数m部分,它要求每一个部分,并采取了最大的产品(间隔DP)
    基于低压电力采集平台DW710C的基础开发
    eclipse 对齐行号在括号中显示和字体调整
    蜗牛—苍茫IT文章大学的路(十)
    国产与第三方库FFmpeg SDK
  • 原文地址:https://www.cnblogs.com/WuCountry/p/646365.html
Copyright © 2020-2023  润新知