java与模式第四章Q?.2
??乍看hQ不能修改?可以扩展g是自相矛盄。?么可以同时又不修攏V?而又可扩展呢Q在?讨论之前Q不妨?察一下?西游记?中,玉皇大帝在美猴王的挑战之下,是?L护天庭的U序的?
??玉帝招安闰猴?
??当年大帝天宫时的猴王便是玉帝天庭的新挑战?猴王说Q?‘皇帝轮做Q明q到我家。?只教他搬出去Q将天宫让与我!”对于这Ҏ战,太白金星l玉皇大帝提出的是:“臣启陛下?。?降一道招安圣旨,把他宣来上界。?。与他籍名在?。??不动众劳师,二则收仙有道也??
??换言之,不劳师动众?不破坏天规便是?闭?Q收仙有道便是???。招安之法便是玉帝天庭的“开Q闭”原则,通过l美猴王?“弼马温”的官职Q便可现有pȝ满变化了的?Q?不必更改天庭的既有秩序,如下图所未?
??招安之法的关键便是不允许更改现有的天庭秩序,但允许将娇儿Un现有的秩序中Q从而扩展了这一U序。用面向对象的语a?Ԍ允许更改的是pȝ的抽象层Q?允许扩展的是pȝ的实雱?
??《太玄?论?固革?
??西汉杨雄的?太玄》一书说Q?知固而不知革Q物失其则;知革而不知固Q物失其均??
???pȝ对修改关闭,是《太玄??的?固?Q?pȝҎ展开发,是《太玄??的?革?。一个系l不可扩展,是“物失其则?Q或者说pȝ推动使用的hx而一个系l动辄需要修改,F“物失其均?Q也是失去重心?
??因此Q??闭?原则非常接近《太玄???的?固革”原则?
??抽屡化是关键
??解决问题的关键在于抽象化。在像java语言这样的面向对象的~程语言里面Q可以给pȝ宣言Z个一x逸?不再更改的抽象设计,此设计允许有无穷无尽的行为在实现层@实现。在java语言里,可以l出?或E个抽象javacLjava接口Q定出?的具体类必须提供的方法的特征作ؓpȝ设计的抽象层。这个抽象层预了所有的可能扩展Q因此,在任何扩展情况下都不会改变?这就使得pȝ的抽象层不需修改Q从而满了“开Q闭”原则的W二条,对修改关闭?
??同时Q由于从抽屡层导Z个或多个新的具体cd以改变系l的行ؓQ因此系l的设计Ҏ展是?的,这就满了??闭?原则的第?。关于在java语言中实现抽象化的方法,请阅d面的“专题:java接口”一f和“专题:抽屡cZ???
??转蝲自:IT连蝲在线?a href="http://www.zaixianzazhi.com/lz/ms/20110322/78.html" target="_blank">http://www.zaixianzazhi.com/lz/ms/20110322/78.html