问题:在这个模式中,你曾经说过抽象是不能变化的,我想问一下,即然抽象是不变的,你为什么还要在你的文章中把抽象也定义成了接口,不变,那么我就可以用一个具体类了,请回答一下,谢谢?
可以的,比如模型类就是一个具体类,模型类的持久化动作就是分离的。
重点实际是:抽象和行为编码设计时分离;运行时再进行组合。
首先是分离;然后再是合并。
我想对于"运行时再进行组合"这句也是在编码阶段完成的,运行时怎么会自动合并呢,程序怎么知道谁要和谁合并
还有就是:这个模式抽象到底能不能变化,如果能变化,这个变化到底是指什么在变化
当然由客户端组合起来,可以组合多个变化的行为,行为能变,抽象不变。
抽象不变到底是指什么不变,我不太明白,比如,当Log是抽象时,如果在不同情况下,用TXTLOG或DOCLOG实现,这算不算抽象变化??
你主要区分一下对象中的属性和行为。
说下个人见解:上面是GOF标准定义,可以搞清楚这个pattern的目的就是使用弱关联避免强关联(一点不关联,去练隔山打牛,:)),那么第二个问题什么是强关联,什么是弱关联,强关联就是编译期的依赖,其实就是extend继承关系,弱关联就是运行期的关联,其实就是组合/聚合(CRAP),在运行期构建依赖关系.
举个例子,一个抽象类a,它的实现类c要用抽象类b的功能,就把依赖的抽象类b引用进来(在a中引用),而不是继承进来,即c又继承a又继承b(java也不支持多重继承),这样在运行期就可以把b的实现类d注进来,这样避免了编译期的强依赖,灵活一些.
[该贴被litdong于2007年01月25日 15:59修改过]
[该贴被litdong于2007年01月25日 16:13修改过]
[该贴被litdong于2007年01月25日 16:15修改过]
[该贴被litdong于2007年01月25日 16:16修改过]