本帖最后由 云惟桉 于 2012-5-23 17:16 编辑
- private NumberManager commonManager = new NumberManager();/此三个对象为什么不在NumberManager类中实例化,要在这里实例化。
- private NumberManager expressManager = new NumberManager();//这种是单例设计模式吗?
- private NumberManager vipManager = new NumberManager();
复制代码 这是为了提高程序的可扩展性,把NumberManager对于号码管理的共性封装成一个类,只需要使用其实例对象就好了。
NumberMachine提供了三种客户管理办法,就利用NumberManager生成三个对应的管理类对象。
如果需要再添加更多的客户类型,比如是集团客户 groupCustomer ,那么就需要对应的groupManager。
只要在NumberMachine进行构造对象就行了,不用去修改NumberManager的代码。
这更加符合软件设计的高聚合低耦合的要求,让各个部分的耦合性降低,软件扩展性就更好,差错控制也更容易。
并且在这里,NumberMachine设计成单例模式(楼主这里理解成NumberManager也设计成单例,但它不是),私有化构造函数,内部封装一个唯一的实例对象,仅供调用。
号码生成的控制性就会唯一,不会在线程并发的过程里发生混乱:
NumberMachine-----> |------>commonManager -----|------>synchronized
|------>expressManager -------|
|------>vipManager -----------|
对于每个线程操作唯一的NumberMachine,也就同时利用唯一的commom/express/vipManager生成号码。
因为NumberManager里已经设置了同步函数。因此会保证共享的数据处于临界区内,不会发生并发带来的问题。
|