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)中解决一个问题。基于接口的模式强调了语境,因为语境决定了我们是否需要定义或者重新定义对方法的访问手段。

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

 

 

原文地址:https://www.cnblogs.com/WuCountry/p/646365.html