本篇內(nèi)容介紹了“java軟件設(shè)計(jì)七大原則的定義”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
公司主營業(yè)務(wù):成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出廣陵免費(fèi)做網(wǎng)站回饋大家。
一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該`對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉`。用抽象構(gòu)建框架,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)。 優(yōu)點(diǎn):提高軟件系統(tǒng)的可復(fù)用性以及可維護(hù)性
public interface ICourse { Integer getId(); String getName(); Double getPrice(); }
public class JavaCourse implements ICourse{ private Integer Id; private String name; private Double price; public JavaCourse(Integer id, String name, Double price) { this.Id = id; this.name = name; this.price = price; } public Integer getId() { return this.Id; } public String getName() { return this.name; } public Double getPrice() { return this.price; } }
// 如果需要在原有功能基礎(chǔ)上添加一個(gè)獲取打折價(jià)格的功能,開閉原則建議不要修改原有接口,這里可以繼承原有JavaCourse類, // 在原有功能之上擴(kuò)展 public class JavaDiscountCourse extends JavaCourse { public JavaDiscountCourse(Integer id, String name, Double price) { super(id, name, price); } public Double getDiscountPrice(){ return super.getPrice()*0.8; } }
`高層模塊不應(yīng)該依賴低層模塊`,二者都應(yīng)該依賴其抽象。抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象。 針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程。 優(yōu)點(diǎn):可以減少類之間的耦合性,提高系統(tǒng)的穩(wěn)定性,提高代碼可讀性和可維護(hù)性,可降低修改程序所造成的風(fēng)險(xiǎn)。
public interface ICourse { void studyCourse(); } public class JavaCourse implements ICourse { @Override public void studyCourse() { System.out.println("Geely在學(xué)習(xí)Java課程"); } } public class PythonCourse implements ICourse { @Override public void studyCourse() { System.out.println("Geely在學(xué)習(xí)Python課程"); } }
public class Geely { public void setiCourse(ICourse iCourse) { this.iCourse = iCourse; } private ICourse iCourse; public void studyImoocCourse() { iCourse.studyCourse(); } }
public class Test { public static void main(String[] args) { Geely geely = new Geely(); geely.setiCourse(new JavaCourse()); geely.studyImoocCourse(); geely.setiCourse(new FECourse()); geely.studyImoocCourse(); } }
不要存在多于一個(gè)導(dǎo)致類變更的原因。一個(gè)類/接口/方法只負(fù)責(zé)一項(xiàng)職責(zé)。 優(yōu)點(diǎn):降低類的復(fù)雜度、提高類的可讀性、提高系統(tǒng)的可維護(hù)性、降低變更引起的風(fēng)險(xiǎn)。
// 不推薦的寫法 public class Bird { public void mainMoveMode(String birdName){ if("鴕鳥".equals(birdName)){ System.out.println(birdName+"用腳走"); }else{ System.out.println(birdName+"用翅膀飛"); } } }
public class FlyBird { public void mainMoveMode(String birdName){ System.out.println(birdName+"用翅膀飛"); } } public class WalkBird { public void mainMoveMode(String birdName){ System.out.println(birdName+"用腳走"); } }
public class Test { public static void main(String[] args) { // 不推薦寫法 Bird bird = new Bird(); bird.mainMoveMode("大雁"); bird.mainMoveMode("鴕鳥"); // 推薦寫法,功能單一 FlyBird flyBird = new FlyBird(); flyBird.mainMoveMode("大雁"); WalkBird walkBird = new WalkBird(); walkBird.mainMoveMode("鴕鳥"); } }
用多個(gè)專門的接口,而不使用單一的總接口。客戶端不應(yīng)該依賴它不需要的接口。 一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。 建立單一接口,不要建立龐大臃腫的接口。 `盡量細(xì)化接口,接口中的方法盡量少`。 適度原則,一定要適度。 優(yōu)點(diǎn):符合我們常說的高內(nèi)聚低耦合的設(shè)計(jì)思想,從而使得類具有很好的可讀性、可擴(kuò)展性和可維護(hù)性。
public interface IAnimalAction { void eat(); void fly(); void swim(); } // 將一個(gè)接口拆分成3個(gè)接口 public interface IEatAnimalAction { void eat(); } public interface IFlyAnimalAction { void fly(); } public interface ISwimAnimalAction { void swim(); }
public class Dog implements ISwimAnimalAction,IEatAnimalAction { @Override public void eat() { } @Override public void swim() { } }
一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解,又叫最少知道原則。 `盡量降低類與類之間的耦合`。 優(yōu)點(diǎn):降低類之間的耦合。
public class Boss { public void commandCheckNumber(TeamLeader teamLeader){ teamLeader.checkNumberOfCourses(); } } public class Course { } public class TeamLeader { public void checkNumberOfCourses() { List<Course> courseList = new ArrayList<Course>(); for (int i = 0; i < 20; i++) { courseList.add(new Course()); } System.out.println("在線課程的數(shù)量是:" + courseList.size()); } }
public class Test { public static void main(String[] args) { Boss boss = new Boss(); TeamLeader teamLeader = new TeamLeader(); boss.commandCheckNumber(teamLeader); } }
所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象。通俗地講,子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。 里氏替換原則意思說,在軟件中將一個(gè)基類對(duì)象(父類)替換成它的子類對(duì)象,程序?qū)⒉粫?huì)產(chǎn)生任何錯(cuò)誤和異常,反過來則不成立, 如果一個(gè)軟件實(shí)體使用的是一個(gè)子類對(duì)象的話,那么它不一定能夠使用基類對(duì)象。里氏代換原則是實(shí)現(xiàn)開閉原則的重要方式之一, 由于使用基類對(duì)象的地方都可以使用子類對(duì)象,因此在程序中盡量使用基類類型來對(duì)對(duì)象進(jìn)行定義,而在程序運(yùn)行時(shí)再確定其子類 類型,用子類對(duì)象來替換父類對(duì)象。 例如:我喜歡動(dòng)物,那我一定喜歡狗,因?yàn)楣肥莿?dòng)物的子類。但是我喜歡狗,不能據(jù)此斷定我喜歡動(dòng)物,因?yàn)槲也⒉幌矚g老鼠,雖然 它也是動(dòng)物。
1) `子類可以實(shí)現(xiàn)父類的抽象方法,但是不能覆蓋/重寫父類的非抽象方法`。 2) 子類中可以增加自己特有的方法。 3) 當(dāng)子類覆蓋或?qū)崿F(xiàn)父類的方法時(shí),方法的前置條件(即方法的形參)要比父類方法的輸入?yún)?shù)更寬松。 4) 當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時(shí),方法的后置條件(即方法的返回值)要比父類更嚴(yán)格。
參考: Java七大設(shè)計(jì)原則
盡量使用合成和聚合,而不是集成來達(dá)到復(fù)用的目的。該原則就是在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為新對(duì)象的 一部分,新的對(duì)象通過向這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的。
“java軟件設(shè)計(jì)七大原則的定義”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
新聞標(biāo)題:java軟件設(shè)計(jì)七大原則的定義
轉(zhuǎn)載來源:http://muchs.cn/article0/ihihoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、云服務(wù)器、定制網(wǎng)站、Google、品牌網(wǎng)站設(shè)計(jì)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)