在上一章我们提出了一种情形,并且指出传统OO的做法不尽人意,我们需要一种新的思路来帮我们解决这样的问题。这是我们引入了第一种设计模式————策略模式。
什么时候使用?
当如下情况发生时:
一个对象的某个行为有多种实现方式。这时候使用策略模式可以将各个算法独立于对象独立运行,而且可以相互置换。
吃树叶者
在上一章我们提出了一种情形,并且指出传统OO的做法不尽人意,我们需要一种新的思路来帮我们解决这样的问题。这是我们引入了第一种设计模式————策略模式。
当如下情况发生时:
一个对象的某个行为有多种实现方式。这时候使用策略模式可以将各个算法独立于对象独立运行,而且可以相互置换。
在历史进程中,我们由面相对象编程转向了面相对象编程,项目的规模也变得越来越大,其中有着必然的需求————改变。这里引用HeadFrist中的一句话:”不管软件设计的多好,一段时间之后,总是需要成长与改变,否则软件就会”死亡”。”紧接着就出现了面相对象这一概念:我们使用类来映射现实
中的对象,通过对象来实现我们需要的功能,大家各辞其职,互不影响。这时候就不会出现牵一发而动全身的情况。软件的更新越来越快,实现的功能也越来越多。由于面相对象
的支持,各个功能以模块化的形式在互联网上传播开来,大家再也不用去造重复的轮子,我们也有了更多时间做更加酷炫的事情。
很显然之前面相对象是一种强大而先进的思想,但是在开发过程中我们发现了很多问题。问题的来源也是改变,我们来举一个例子:
假设使用传统OO的方式,我们创建了一个超类Animal,它定义了所有的Animal产生的共同行为 makeSounds();run();mating();。 之后因为市场需求的变动我们需要给动物添加一个新的功能jump();(不改动就会死)。。这里传统OO有两种解决的方式:
Given a set of N integers S={0,1,…,N−1} and a sequence of requests of the following form:
Union-find with specific canonical element. Add a method find() to the union-find data type so that find(i) returns the largest element in the connected component containing i. The operations, union(), connected(), and find() should all take logarithmic time or better. For example, if one of the connected components is {1,2,6,9}, then the find() method should return 9 for each of the four elements in the connected components.
course并查集的课后题之一,看完之后没有开始没有什么思路,也没找到什么答案,想了想写了一下,感觉受益挺多的