




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Java面向对象16种设计原则总结版(模版) 第一篇:Java面向对象16种设计原则总结版(模版)Java面向对象16种设计原则一类的设计原则依赖倒置原则-DependencyInversionPrinciple(DIP)2里氏替换原则-LiskovSubstitutionPrinciple(LSP)3接口分隔原则-InterfaceSegregationPrinciple(ISP)4单一职责原则-SingleResponsibilityPrinciple(SRP)5开闭原则-TheOpen-ClosedPrinciple(OCP)二包的设计原则重用发布等价原则-ReleaseReuseEquivalencyPrinciple(REP)7无环依赖原则-TheAcyclicDependenciesPrinciple(ADP)8稳定依赖原则-TheStableDependenciesPrinciple(SDP)9稳定抽象等价原则-TheStableAbstractionsPrinciple(SAP)10共同封闭原则-TheCommonClosurePrinciple(CCP)11全部重用原则-TheCommonReusePrinciple(CRP)三扩展原则迪米特法则-LeastKnowledgePrinciple(LKP)13黑盒原则-BBP(BlackBoxPrinciple)14缺省抽象原则-DAP(DefaultAbstractionPrinciple)15接口设计原则-IDP(InterfaceDesignPrinciple)16不要构造具体的超类原则-DCSP(Don'tConcreteSupperclassPrinciple)1.DependencyInversionPrinciple(DIP)里氏替换原则所有引用基类的地方必须能透明地使用其子类的对象。也就是说,只有满足以下2个条件的OO设计才可被认为是满足了LSP原则:A不应该在代码中出现if/else之类对子类类型进行判断的条件。以下代码就违反LSP定义。if(objtypeofClass1){dosomething}elseif(objtypeofClass2){dosomethingelse}B子类应当可以替换父类并出现在父类能够出现的任何地方,或者说如果我们把代码中使用基类的地方用它的子类所代替,代码还能正常工作。里氏替换原则LSP是使代码符合开闭原则的一个重要保证。同时LSP体现了:1)类的继承原则:如果一个继承类的对象可能会在基类出现地方出现运行错误,则该子类不应该从该基类继承,或者说,应该重新设计它们之间的关系。2)动作正确性保证:从另一个侧面上保证了符合LSP设计原则的类的扩展不会给已有的系统引入新的错误。类的继承原则:RobertC.Martin举了Rectangle和Square的例子。这里沿用这个例子,但用Java语言对其加以重写,并忽略了某些细节只列出下面的精要部分来说明里氏替换原则对类的继承上的约束。1.classRectangle{2.doublewidth;3.doubleheight;4.5.publicdoublegetHeight(){6.returnheight;7.}8.publicvoidsetHeight(doubleheight){9.this.height=height;10.}11.publicdoublegetWidth(){12.returnwidth;13.}14.publicvoidsetWidth(doublewidth){15.this.width=width;16.}17.}18.19.classSquareextendsRectangle{20.publicvoidsetHeight(doubleheight){21.super.setHeight(height);22.super.setWidth(height);23.}24.25.publicvoidsetWidth(doublewidth){26.super.setHeight(width);27.super.setWidth(width);28.}29.}这里Rectangle是基类,Square从Rectangle继承。这种继承关系有什么问题吗?假如已有的系统中存在以下既有的业务逻辑代码:voidg(Rectangler){r.setWidth(5);r.setHeight(4);if(r.getWidth()*r.getHeight()!=20){thrownewRuntimeException();}}则对应于扩展类Square,在调用既有业务逻辑时:Rectanglesquare=newSquare();g(square);时会抛

努力****甲寅
实名认证
内容提供者


最近下载