随笔-19  评论-2  文章-1  trackbacks-0
不变模式:
       
        不变模式可以增强对象的强壮性,不变模式准许多个对象共享一个对象,这降低了对该对象进行并发访问时的同步化开销。如果要修改一个不变对象的状态,则需要创建一个新的对象,并将其存入新的对象里。不变模式只涉及到一个类,一个类的内部状态一旦被创建以后,在整个期间都不会发生变化。他有两种一种是强不变模式和弱不变模式。
        弱不变模式:
首先满足没有方法可以改变对象的状态,则对象一旦被创建之后,对象的状态就不会改变。二该对象的所有的属性都是私有的,并且不准许声明任何公有的方法来改变他们。三这个对象所引用的对象也应该是不变的对象,如果在初始化时应用了一个可变的对象,则应该对该可变对象进行复制一份,而不要使用原来的拷贝。这种模式的缺点是他可以用子类,并且子类可以是可变的对象。可变的子类可能一修改父类对象的状态,从而可能会允许外界修改父对象的状态。

问题:
       为什么说可变的对象可以修该父类对象的状态呢?怎样做?

强不变模式首先要满足弱不变模式,然后将这个类声明成final类,则它变不可能有子类了,并且也将该对象所考虑到的所有方法声明为final。
不变模式与享元模式有很大的相同处,他们的对象状态都有要求不随环境的变化而变化,不过享元模式的内涵状态在不影响享元对象的共享时,可以为可变的。不变模式对对象的要求要比享元模式对对象的要求更严格。


posted on 2005-08-14 23:39 sky 阅读(634) 评论(2)  编辑  收藏

评论:
# re: Immutable 不变模式 2008-04-13 16:22 | wangsh
Good question,I Think in the java language,The weak immutable and stronge immutable is undiference!   回复  更多评论
  
# re: Immutable 不变模式 2009-09-16 11:45 | TYY
我认为这应该和多态有关系吧!比如toString()方法,Base base = new Sub();
System.out.println("base = " + base);打印出的结果其实是Sub对象的!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: