从观察者模式到面向对象-以小见大

面向对象有三大特性:封装,继承和多态.这里总结一些自己的理解.

1.封装:我们将对象抽象为一类,但是对于别的类来讲,并不需要知道当前类的全部细节,只需要知道当前类能做什么,然后通过当前类暴露出来的方法调用即可.封装不仅降低了沟通的效率,同时也提高了协作开发的效率,而且对类而言也提供了一种保护的机制,每个类只操作他需要的方法,而对于其他类不需要了解的东西是无法触及的.类似于现实生活中,我们使用一部手机,并不需要知道手机是如何构成的,使用哪些特殊的材料和技术,不需要知道他的处理器如何工作的,只需要通过他的操作方法即可.这样我们不会触及到处理器和其他手机内部的东西,就减少了手机损坏的可能.对于手机而言,它不需要知道它的处理器有多少电路以及处理器是如何进行运算的,手机只需要调用处理器的方法,为处理器提供数据,然后拿到想要的数据即可.

2.继承:我们将具有近似属性和行为的事物抽象为一类,抽象处理的类包含了一类事物的共同或近似的属性和行为,但是在我们实际的操作过程中,具体的类有其特有的方法和属性(这就是事物的普遍性和特殊性).因此抽象只是一个框架的搭建,而我们通过继承和实现接口,让类变得具体,变得有血有肉.而通过继承,我们不仅将程序的设计规范化,也减少了大量重复的代码,并给予了程序无限的扩展空间.

3.多态:继承和多态息息相关,多态能够解决继承中无法解决的问题.如果我们将所有的动物抽象为一个动物类,那么所有的动物都继承自我们的动物类,他们都有进食的行为,但是进食的具体方式有很多种.对于同一类事物的同一行为有不同的处理方式和触发条件,这个就是多态.关于多态的实现,java中依靠接口和抽象类来进行框架的搭建,通过重写和重载来实现.---关于重写和重载:重写是子类继承父类时,有和父类一样的方法名,返回值和参数列表的方法,这就是重写,可以在子类中使用super关键字来调用父类的方法.我们看下重写在程序设计中的意义,对于一个父类,他有一个工作的方法,他是一个作家,这个父类有一个孩子,这个孩子也有工作的方法,这个孩子是一个程序员,虽然他和他的孩子都有工作的方法,但是却做的完全不一样,所以此时就需要让子类重写父类的工作方法.重载是指由同样的方法名,不同的参数列表,例如一个人在状态一般的时候只能做80分的工作,但是如果他多了一点刺激,可能会做到90分,这里状态是一个参数,刺激也是一个参数,我们可以调用一个参数的方法,也可以调用两个参数的方法.

接下来我们看一下观察者模式:

首先我们分析一下观察者模式的构架:观察者模式定义了一种多对多的关系,让多个观察者对象同时监听某一对象,这个主体在状态进行变化的时候,会通知所有的观察者对象,让他们更新自己.所以对于被观察者来讲,它应该有三个方法--添加观察者,删除观察者和通知观察者更新三个方法.而观察者则应该有更新的方法.

一个被观察者在添加观察者之后,应该有一个数据集合来记录所有对它感兴趣的类,当被观察者发生变化通知观察者时,可以得到它所有注册的观察者,然后调用观察者各自的update方法.

于是,我们可以总结出所有的被观察者都应该有三个方法和一个数据集合,这时我们可以通过继承或者接口来实现我们被观察者类的设计.根据上面分析得知,无论添加观察者还是删除观察者或者通知观察者更新,这三个方法都是固定不变的,所以这里我们选用继承来进行被观察者类的设计.

而对于观察者来讲,每个观察者都应该有一个更新自身的方法,但是每个观察者的更新方法又有千差万别,所以观察者的设计应该通过接口来实现.

最后我们看一下观察者类和被观察者类在java中实现的源码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值