朝着理想坚实迈进_坚实原则:单一责任原则
朝著理想堅(jiān)實(shí)邁進(jìn)
單一責(zé)任原則是首字母縮寫(xiě)詞的第一原則。
“班級(jí)應(yīng)該只有一個(gè)改變的理由。”
每個(gè)模塊或類都應(yīng)對(duì)軟件提供的功能的單個(gè)部分負(fù)責(zé),并且該責(zé)任應(yīng)由類完全封裝。
例如,想象一下導(dǎo)航軟件的場(chǎng)景。
我們根據(jù)給定的方向(北,南,西,東)改變了位置。
Position類包含有關(guān)x和y軸位置的值。
package com.gkatzioura.solid.single;public class Position {private Integer xAxis;private Integer yAxis;public Position(Integer xAxis, Integer yAxis) {this.xAxis = xAxis;this.yAxis = yAxis;}public Integer getxAxis() {return xAxis;}public void setxAxis(Integer xAxis) {this.xAxis = xAxis;}public Integer getyAxis() {return yAxis;}public void setyAxis(Integer yAxis) {this.yAxis = yAxis;} }這個(gè)方向是一個(gè)枚舉,代表朝北,向東,向南和向西的方向。
package com.gkatzioura.solid.single;public enum Direction {N,W,S,E }最后有一個(gè)Navigator類,負(fù)責(zé)根據(jù)方向和位置的變化進(jìn)行導(dǎo)航。
public class Navigator {public Position navigate(Position position, Direction direction) {....}}為了正確導(dǎo)航,導(dǎo)航器應(yīng)根據(jù)方向確定下一個(gè)位置。 同樣,導(dǎo)航器應(yīng)在值小于0的情況下固定位置。
public class Navigator {public Position navigate(Position position, Direction direction) {Position nextPosition = resolve(position,direction);Position fixedPosition =fix(nextPosition);return fixedPosition;}public Position resolve(Position position,Direction direction) {switch (direction) {case N:return new Position(position.getxAxis(),position.getyAxis()+1);case S:return new Position(position.getxAxis(),position.getyAxis()-1);case W:return new Position(position.getxAxis()-1,position.getyAxis());case E:return new Position(position.getxAxis()+1,position.getyAxis());default:throw new IllegalArgumentException();}}public Position fix(Position position) {return new Position(position.getxAxis()<0?0:position.getxAxis(),position.getyAxis()<0?0:position.getyAxis());}}這種方法的問(wèn)題在于,如果位置有效性標(biāo)準(zhǔn)發(fā)生更改,我們必須更改Navigator類。 位置移動(dòng)機(jī)構(gòu)變更的情況也相同。 導(dǎo)航器不僅要導(dǎo)航,還要解決下一個(gè)位置并確定新位置。
不違反單一職責(zé)原則的方法是創(chuàng)建一個(gè)將解決下一個(gè)職位的類,并負(fù)責(zé)確定新職位。
NextPositionResolver類將根據(jù)給定的方向解析下一個(gè)位置。
package com.gkatzioura.solid.single;public class NextPositionResolver {public Position resolve(Position position,Direction direction) {switch (direction) {case N:return new Position(position.getxAxis(),position.getyAxis()+1);case S:return new Position(position.getxAxis(),position.getyAxis()-1);case W:return new Position(position.getxAxis()-1,position.getyAxis());case E:return new Position(position.getxAxis()+1,position.getyAxis());default:throw new IllegalArgumentException();}}}如果無(wú)效的x或y值,PositionRepairer類將固定位置。
package com.gkatzioura.solid.single;public class PositionRepairer {public Position fix(Position position) {return new Position(position.getxAxis()<0?0:position.getxAxis(),position.getyAxis()<0?0:position.getyAxis());}}Navigator類將具有NextPositionResolver和PositionRepairer類作為依賴項(xiàng),以便正確執(zhí)行導(dǎo)航。
package com.gkatzioura.solid.single;public class Navigator {private NextPositionResolver nextPositionResolver;private PositionRepairer positionRepairer;public Navigator(NextPositionResolver nextStepResolver,PositionRepairer positionRepairer) {this.nextPositionResolver = nextStepResolver;this.positionRepairer = positionRepairer;}public Position navigate(Position position, Direction direction) {Position nextPosition = nextPositionResolver.resolve(position,direction);Position fixedPosition = positionRepairer.fix(nextPosition);return fixedPosition;}}您可以在github上找到源代碼。 下一個(gè)原則是開(kāi)放/封閉原則。
另外,我還編寫(xiě)了備忘單,其中包含有關(guān)扎實(shí)原則的摘要。
在鏈接中注冊(cè)以接收它。
翻譯自: https://www.javacodegeeks.com/2018/02/solid-principles-single-responsibility-principle.html
朝著理想堅(jiān)實(shí)邁進(jìn)
總結(jié)
以上是生活随笔為你收集整理的朝着理想坚实迈进_坚实原则:单一责任原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微信不绑银行卡可以收钱和支付吗(只需7步
- 下一篇: ug用哪个电脑系统(ug支持什么系统)