学习总结-设计模式理解(1) 参考《大话设计模式》《Delphi模式编程》

关于设计模式的学习,从入门的角度,个人觉得《大话设计模式》、《Delphi模式编程》很值得参考。

  今天把自己的学习过程中的一些理解整理一下,当作自己的学习笔记。

学习之前,需要复习一些关于面向对象的基础知识,这里列出一些提纲,详细可以Baidu一下或者翻查一些其他资料

1.       面向对象基础

1.1.      类与实例

我的理解:

“电视机”和“我家里的那台Sony电视机”有何不同。

       “电视机”,当我们提到电视机,我们应该知道,它是可以看电视的,有图像,有声音,外形古老一点砖头式的,后者现在平板、液晶等等,有可能有遥控器等等。

       但是你能说“电视机”是哪一台吗?不能,因为它是一个“名称”,一个框架图,它描绘了电视机应该有的一些属性,比如尺寸、颜色、品牌等等,也描绘了电视机能够做什么(方法),比如它能够显示图像,能够播放声音。

       所以“电视机”就是一个类,它描述了一个电视机类的一些属性和方法,“属性”就是说明这个类说具有的状态,“方法”就是说明这个类能够做什么。

       当然类的描述不只“属性”和“方法”。

       好了,“我家里的那台Sony电视机”表示一个具体的电视机,你一说,我们就知道,原来是那一台!我们知道那一台电视的一些信息,比如是我的,它的品牌是Sony等等,如果你对你的电视机更有爱心的话,你可以给你的电视机起个名字“NINI”,这个是就是电视机的名称啦。

       当然我的电视机或者你的电视机,收属于电视机这个类,应该没错吧。

       那么我们可以这样理解,我的电视机,是一个明确的对象,它有它的具体属性值,比如品牌是Sony,拥有者是“我”,等等,那么这个电视机对象就是一个电视机类的实例!

       类描述了一种框架,实例就是类的具体实现。

在编程的时候,我们一般先定义一个类,然后对这个类进行实例化,最后我们用这个实例化的对象进行做一些事情。正常情况下,我们用的是类的对象进行操作,而不是用类本身。

à实例化à生成一个实例(也称为“对象”)à用对象来操作

一般我们理解的类就是Class,其实我们可以把接口也理解为类,只是接口描述了一些方法,没有描述属性而已,而且接口描述的方法没有被实现。

所以方法的实现,就是具体做什么事情。

比如我有一个方法:

吃饭()

begin

//方法体

end;

如果里面方法体是空的,表示虽然有个方法叫做吃饭,但是它什么都不干!

       如果我这样定义

       吃饭()

beign

       大口大口吃饭;

end;

 

吃饭()

beign

       慢慢咀嚼;

end;

那么虽然我们都定义一个“吃饭”的方法,但是他们的实现方式是不同,一个是“大口大口”,一个是“慢慢咀嚼”。

所以接口中只是定义了一个方法名称,没实现,说明其实方法名称是有了,但是它具体怎么做其实是不知道的,需要继承接口的类去实现。

1.2.      构造方法

构造方法,就是相当于在实例化一个实例的时候,需要初始化一下,比如你现在要生产一台电视机,我们要给它初始化一个信息,比如颜色“紫色”、液晶的等等,初始化过程就是构造方法干的事情了。

构造方告诉我们,一个对象被创建出来之后,一个什么鸟样!

1.3.      方法重载

方法的重载,涉及到继承的问题。

说明一下继承,比如B继承了A,那么B就是拥有了A的所有的东西(当然除了private以外),怎么立即呢?比如A能够跳楼,那么B可能也能够跳楼,A能飞,B也能够飞。

那么如果B能死而复生,A行不行呢?答案是不一定,如果“死而复生”是BA上面继承下来的,那么A也可以;如果不是继承下来的,那么A就不行!

  

B

A

B继承A,表示B具有A的所以,体现了B包含A的概念。

有人说,“我是鸭子呱呱呱”,如果有个家伙继承了,那么他这辈子也肯定会“呱呱呱”,然后如果他想“唧唧唧”也没问题。如果他说我不要“呱呱呱”,你就告诉他,那你还继承“呱呱呱”干嘛呢!

1.4.      属性与修饰符

属性就是表示这个类的一些状态描述,比如说电视机的颜色、尺寸等等。

在一个类中,其实是最基本是包含以下两个部分

  

 

 

       字段,表示类的一些状态描述,为什么我们通常都要说是属性呢?其实属性是一种方法,一般从面向对象的角度来说,字段一般是不公开的,而是通过属性方法来公开的,这样外部是通过访问属性来访问类的字段,因为属性是方法,所以我们可以在方法体内限制一些属性,比如说我们有个类,叫做“活人”,它有个字段表示“是生是死”,如果我们可以随意访问这个字段,然后把这字段设置为“死”,那么这个“活人”也是死的,那么就不会常理了,通过属性的方法,不管我们如何来设置这个字段,它都是“活”的,那就可以控制了。

       所以其实属性可以代表字段,但是实际是它是通过方法来控制字段的读取和写入的。

       刚才说了,有些字段其实我不想让人家知道,这个是私人秘密,那么就要通过一个修饰符来修饰了,用private,如果你先把私人秘密公开,那么就用public,有人喜欢这么干我也没办法。

1.5.      面向对象三大特性

1.5.1.      封装

1.5.2.      继承

1.5.3.      多态

刚刚提到,同样一个吃饭的方法,但是实现却有不同,如果对于同一个类的子类而已,因为继承了父类,所以有了吃饭这个方法,但是如果我们“覆盖”父类的吃饭方法,重新来是实现这个吃饭的方法,胖子就“大口大口”,靓女就“慢慢咀嚼”。我们可以理解为“初级多态”,为什么说初级“多态”呢,因为要实现真正的“多态”还需要做一些工作。

举例说明:

父类:A  吃饭()

子类:胖子 吃饭(),睡觉()

子类:靓女 吃饭(),装扮()

这里提到一个原则,就是“向上转换”,即子类可以转换为父类,而父类不能直接转换为子类,为什么?因为父类并不完全具有子类的所有内容,但是子类可能可以转为父类,因为子类拥有父类的所有内容。

好了,如果子类可以转为父类,那么当子类转为父类,然后以父类的身份出场,会怎么样呢?

今天有个宴会,老爸临时有事,就叫胖子儿子出场,到了现场,吃起饭来,那就不是老爸的吃法,那可是“大口大口”的吃啊。

过了几天又有宴会,老爸临时又有事,经过上次教训之后,准备让小女儿出场,到了现场,全场了都散了,她还在“慢慢咀嚼”~~~~

这就是多态,同样一个类,当子类代替父类出场的时候,就可以实现多态了。

1.6.      重构

简单一些,你觉得以前写的程序不怎么的,重新改一改,也是重构,只是没有重构到位。

复杂一些,你觉得以前写的程序不怎么的,用给一些设计模式的理论,面向对象的原则,重新对程序进行规划设计,以达到可以程序易维护、代码易复用的目的,那么基本也就差不多了。

1.7.      抽象类

定义了一个类,这个类有字段、方法等,但是方法没有实现,类用virsual标识,这样的类我们成为抽象类,抽象类被继承之后,子类必须实现抽象类所定义的方法。

1.8.      接口

定义一个“类”,这个类没有字段,只有方法,就变成了接口。

1.9.      委托与事件

委托,就是对一类方法的引用,什么叫做“一类方法”,一类方法就是具有同样的方法参数和返回类型的方法,比如

methodAA:integer

methodBBString

methodCCinteger

其实是methodAmethodC是同一类,因为他们的参数数量一样,参数的类型也一样,返回类型都没有。

定义一个委托,比如“委托ACNinteger)”的方法。

委托的使用。

先定义一个委托,然后声明一个委托事件,然后告诉委托事件你要委托声明方法给它,然后调用这个委托事件即可,就要先调用一个方法一样。

posted @ 2009-11-23 16:04  陈凤庆  阅读(363)  评论(0)    收藏  举报