设计模式(一)

面向对象及设计模式原则介绍

1、  面向对象一些概念

1.1    面向对象

通过封装、继承、多态降低程序的耦合度,实现可维护、可复用、可扩展及灵活性好的目标。

1.2    面向对象三大特性

重载与重写:重载在一个类中,重写在继承类之间实现多态特性。

封装:每个对象都包含它能进行操作所需要的所有信息,不依赖其它对象来实现;

         好处:减少耦合,修改可以避免影响到其它对象,以及清晰的对外接口。

继承:a 子类拥有父类非private的属性和功能;b 扩展父类没有的属性和功能;c

写父类的方法。

缺点:父类变子类不得不变,父类的实现细节暴露给子类,形成类与类之间的一种强耦合关系。

多态:a 子类以父类的身份出现;b 子类在工作时以自己的方式来实现;c 子类以父类的身份出现时,子类特有的属性和方法不可以使用。

         为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟,子类再选择使用重写替换成自己的实现。

1.3    抽象类:不能被实例化、必须被子类重写,有抽象方法的类即抽象类。

1.4    委托与事件:

委托是对函数的封装,可以当做给方法的特征制定一个名称,而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。委托是一种引用方法类型,一旦为委托分配了方法,委托将与该方法具有完全相同的功能。

.net中比较普遍,一个控件(控件类实例)的事件(类中的方法)可以通过+=来根据事件处理类来实例化生成委托。

protected void Page_Load(object sender, EventArgs e)

        {

            Button1.Click += new EventHandler(Button1_Click);

        }

 

        void Button1_Click(object sender, EventArgs e)

        {

            throw new NotImplementedException();

}

1.5    耦合:高内聚低耦合原则。

1.6    UML简要记忆

 UML图示样例

2、  设计模式几个原则

2.1 单一职责原则

        就一个类而言,应该仅有一个引起它变化的原因。也就是要发现职责并把职责分离。

2.2 开放—封闭原则

        对扩展开放,对修改封闭,保证需求的修改相对稳定。

        无论一个对象/模块多么的“封闭“,都会存在一些无法对之封闭的变化,所以我们应该在设计之初就要想到可能发生的变化,然后创造对象来隔离变化,查明可能发生变化所等待的时间越久,要创建正确的抽象越困难。

        设计模式的核心所在,应对呈现出频繁变化的那部分做出抽象,而不是刻意对每个部分都进行抽象,拒绝不成熟的抽象。

2.3 依赖倒转原则

        定义:抽象不应该依赖细节,细节应该依赖于抽象。

        说明:针对接口编程,不要对实现编程;

                 高层模块不应该依赖于底层模块,两个都应该依赖于抽象;

                 抽象不应该依赖于细节,细节应该依赖于抽象。

        依赖倒转原则可以说是面向对象的标识,针对抽象编程而不是针对细节编程,所有的依赖关系都终止于抽象或者接口,这就是面向对象设计。

2.4 里氏代换原则

一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它觉察不出父类对象和子类对象的区别。也就是说,在软件里面,父类都替换成它的子类,程序行为没有变化。

定义:子类型必须能够替换掉它们的父类型。

说明:使得复用成为可能,只有当子类可以完全替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也可以在父类的基础上增加新的行为。

2.5 迪米特法则

定义:如果两个类不必直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

        说明:在类的结构设计上,每一个类都应当尽量降低成员的访问权限;

                 根本思想:强调了类之间的松耦合。

2.6 反射机制