**
在lab3中又一次体验了从0开始设计的感受,由于多了对可复用性和可维护性的要求,设计难度增加了很多,好在实验指导中提供了6种方案,启发了思路。鉴于装饰器模式中间逻辑相对复杂一点,觉得自己驾驭不了,一旦出错很难进行定位、修复,因此选择使用了第五种方案,委托的形式,又由于实际的需要对其稍作了一些修改,多了一层委托关系。主要是出于以下的想法,如果使用实验指导中给出的方案,则在修改位置等参数时,一个位置、两个位置、多个位置所需的参数不一样,若想统一传入,只能使用list传入,同时需要检查list中的位置数目与所需的是否一致,如果所有这三种类型的位置的内部实现都用list,那自然这样的传入不会引起很大的麻烦。但还是希望能找到一种方法,能够不用list传入,内部实现就根据个数而定,一个、两个位置的就使用单独的位置成员变量,对于多个位置的自然需要使用list。若想实现这样的R值,就需要解决位置的setter接口如何统一的问题。有一种方案是对每种数量的位置都专门设立一个改变位置的接口,但是这样就使得改变位置需要与位置数量相关联,并且又多出了很多类,故没有采取。最后采取的方案是,setter方法仍放在涉及位置数目的接口中,但初次创建涉及位置数目的接口时需先传入一个被委托的涉及位置改变的接口对象,这个对象只用于判断该位置是否可以被预设、被改变,并不做任何实际修改。这样的实现虽然解决了上述问题,但还是有所缺陷,多增加了一层委托关系,使得整个结构变得更加复杂。但想了很久也没有想到合适的方案,最后还是采用了最后一种。
**