目录
一、前言
自从结束了VB,C#和设计模式又是一种新的语言,也是我们向专业人士过度的一个重要的阶段,在不断的遇到问题,不断的思考对面向对象和面向过程经行理解。通过学习C# 和设计模式,感受到了大师们智慧以及他们看待问题,解决问题的方法,而在学习这些知识的时候想起了米老师说的一句话,我们之所以累,是因为我们不肯思考,不肯动大脑去想,去思考解决问题的方法。这时我们就要思考了,为什么会有设计模式?它是谁提出来的?提出它用来干什么?带着这些问题学习对自己的帮助会很大。
虽然自己已经学习完了设计模式,但是对设计模式的理解还是很肤浅的,如果拿出来用肯定有很大的难度,做每一件事都会有一个过程,相信在以后用的多了,接触的多了自然而然就知道了,接下来就看看对C#和设计模式的总结吧。
二、了解背景
1.设计模式从何而来?
与很多软件工程技术一样,模式起源于建筑领域,对每一个模式(Pattern)都从Context(前提条件)、Theme或Problem(目标问题)、 Solution(解决方案)三个方面进行了描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。经过四位命名的软件工程学者,将使用频率最高的23中设计模式引入到软件工程。
2.设计模式有什么用?
简单的来说设计模式就是一套通过的设计词汇和一种通用的形式来方便开发人员之间沟通和交流,使得设计方案更加通俗易懂,为我们学习软件提供一套完整的模板,提高开发效率,节约成本,更详细的见博客https://blog.csdn.net/lovelion/article/details/7420866
三、C#基础知识(个别)
1.三大特性
2.类及对象
简单的来说就是我们将具有相同行为和具有相同属性的对象归纳为一类。
具体类见博客
实例
namespace 命名空间名称
{
public class Car(类名a)//声明类
{
//创建一个对象
(Car)类名a (car)对象名a = new (Car)类名a();//类的实例化
}
public class 类名b
{
}
}
3.接口
完全抽象的一种约定
接口是用来实现的
接口指一种规范,不管任何时候都要遵循这个规范
接口可以是一种能力,谁要某种能力就可以实现我这个接口。
1.实现接口
2.显式实现接口
语法
[访问修饰符]interface 接口名‘
{
//接口成员定义
}
以下实例
Interface Ifly
{
voidIFly();
}
C#中接口和类的异同
不同点
不能直接实例化接口
接口不能包含方法的实现
接口可以多继承,类只能单继承
类定义可在不同的源文件之间进行拆分
不同点
接口,类都可以从多个接口继承
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员
接口和类都可以包含事件,索引器,方法和属性
声明接口
接口声明不能包含以下成员
数据成员
静态成员
接口声明只能包含如下类型的非静态成员函数的声明
方法,属性,索引器,事件
接口是引用类型
接口不仅仅是类活结构要实现的成员列表,它是一个引用类型
我们不能直接通过类对象的成员访问接口,然而,我们可以通过把类对象引用强制转换为接口类型来获取指向接口的引用。 一旦有了接口的引用,我们就可以使用点号来直接调用接口的方法
接口的特点
(1)通过接口可以实现多重继承,C# 接口的成员不能有 public、protected、internal、private 等修饰符。原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是 public。C# 接口中的成员默认是 public 的,java 中是可以加 public 的。
(2)接口成员不能有 new、static、abstract、override、virtual 修饰符。有一点要注意,当一个接口实现一个接口,这2个接口中有相同的方法时,可用 new 关键字隐藏父接口中的方法。
(3)接口中只包含成员的签名,接口没有构造函数,所有不能直接使用 new 对接口进行实例化。接口中只能包含方法、属性、事件和索引的组合。接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类。
(4)C# 是单继承,接口是解决 C# 里面类可以同时继承多个基类的问题。
1.一个接口定义了一个契约。
2.接口可以包容方法、C#属性、事件、以及索引器。
3.在一个接口声明中,我们可以声明零个或者多个成员。
4.所有接口成员的默认访问类型都是public。
5.如果在接口成员声明中包括了任何修饰符,那么会产生一个编译器错误。
6.与一个非抽象类类似,一个抽象类必须提供接口中所有成员的实现,只要这些成员在这个类的基类中出现过。
四,设计模式
1.六大原则
2.模式分类
3.个别设计模式总结
五、模式理解(来自百度)
1.Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2. Adapter(适配器模式):将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
3.Bridge(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
4.Builder(建造者模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
5.Chain of Responsibility 职责链:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
6.Command(命令模式):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
7.Composite 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
8.Decorator 装饰器:动态地给一个对象添加一些额外的职责。就扩展功能而言, 它比生成子类方式更为灵活。
9.Facade(外观模式):为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
10.Factory Method 工厂方法:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
11.Flyweight(享元模式):运用共享技术有效地支持大量细粒度的对象。
12.Interpreter(Interpreter模式):给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。
13.Iterator 迭代器:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
14.Mediator 中介者:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
15.Memento(备忘录模式):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
16.Observer(观察者模式):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
17.Prototype(原型模式):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
18.Proxy(代理模式):为其他对象提供一个代理以控制对这个对象的访问。
19.Singleton(单例模式):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
20.State(状态):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
21.Strategy(策略模式):定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
22.Template Method 模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
23.Visitor(访问者模式):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
总结:学习以一个项目都有不同的收获,不断的学习,不断的收获,有很多不懂的知识需要重复,重复的多了就会了。