開閉原則java代碼演示 Java開閉原則

求助一個開閉原則的JAVA小代碼

public class TestFruit {

為三山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及三山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站建設(shè)、三山網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

public static void main(String[] args) {

Fruit fruit;

fruit = Gardener.NewFruit("apple");

fruit.grow();

fruit.Flowering();

fruit.Fruiting();

fruit = Gardener.NewFruit("pear");

fruit.grow();

fruit.Flowering();

fruit.Fruiting();

}

}

interface Fruit {

void grow();

void Flowering();

void Fruiting();

}

class Apple implements Fruit {

public void Flowering() {

System.out.println("開花的是蘋果");

}

public void Fruiting() {

System.out.println("結(jié)果的是蘋果");

}

public void grow() {

System.out.println("種植的是蘋果");

}

}

class Pear implements Fruit {

public void Flowering() {

System.out.println("開花的是梨");

}

public void Fruiting() {

System.out.println("結(jié)果的是梨");

}

public void grow() {

System.out.println("種植的是梨");

}

}

final class Gardener {

public static Fruit NewFruit(String fruitname) {

if (fruitname.equals("apple")) {

return new Apple();

} else if (fruitname.equals("pear")) {

return new Pear();

}

return null;

}

}

不知這樣寫是否正確。個人認(rèn)為這應(yīng)該是一個工廠模式吧。

所有類的實現(xiàn)都由工廠類(也就是園丁類)完成。

寫的只是一個簡單工廠模式。

通過抽象類及接口,規(guī)定了具體類的特征作為抽象層,相對穩(wěn)定,不需更改,從而滿足“對修改關(guān)閉”;而從抽象類導(dǎo)出的具體類可以改變系統(tǒng)的行為,從而滿足“對擴展開放”。開閉原則在問題描述時就已經(jīng)實現(xiàn)了。當(dāng)然這只是對于客戶端(也就是測試類)來說,測試類只需要提供要創(chuàng)建對象的描述,系統(tǒng)自動創(chuàng)建相應(yīng)的對象。而對于工廠類并沒有滿足開閉原則。

Java中的開閉原則是什么意思

開閉原則即封閉對原來代碼的修改,開放對原來代碼的擴展(如類的繼承,接口的實現(xiàn)等)

開閉原則是一種設(shè)計思想,并不局限于java語言

大概意思就是這些,但是要真正掌握運用開閉原則,還是要多多實踐,多多體會

幫忙編個java程序(很簡單)

設(shè)計模式里對這類設(shè)計有很詳細(xì)的說明,看一下挺好。

你這個例子也很典型,對理解接口來說,挺不錯的一個例子

//接口,在這里用接口是很恰當(dāng)?shù)?,因為任何水果都有計算各自的總價格的行為,這個行為分離出來,最好的方法就是做成接口

public interface IAccount {

public int getAccount();//get one fruit price

}

//水果類,因為任何一種水果的價格計算都是質(zhì)量乘以單價,所以計算總價值的方法可以直接在水果類中實現(xiàn),但是由于它只是個抽象類,真正執(zhí)行的時候,是計算了具體某種水果的單價乘以質(zhì)量。//這樣就省去了在每個派生出來的水果類里實現(xiàn)計算價值的方法。

public abstract class Fruit implements IAccount{

protected int weight;

protected int price;

public int getAccount() {

return this.price*this.weight;

}

}

//具體的水果類,水果類的派生類

//蘋果類

public class Apple extends Fruit{

public Apple(int w) {

this.price = 2;//因為每種水果不同,所以不必要在new它的時候再傳給它,直接在類里賦值即可,至于好的設(shè)計是完成相應(yīng)的get和set方法,這個再擴展。

this.weight = w;

}

}

//桔子類

public class Orange extends Fruit{

public Orange(int w) {

this.price = 3;//桔子的價格就不同于蘋果的了

this.weight = w;

}

}

//交易類

public class Bussiness {

/**

* @param args

*/

public static void main(String[] args) {

Fruit apple = new Apple(10);

Fruit orange = new Orange(15);

int allMoney = apple.getAccount() + orange.getAccount();

System.out.println(allMoney);

}

}

這樣,水果類就可以很方便的派生,只需聲明一個類繼承水果類(一定要是個抽象類),然后給price賦值,就可以在交易類里實例化并計算總價值,而不需要改動水果類里的任何代碼。

文章題目:開閉原則java代碼演示 Java開閉原則
當(dāng)前路徑:http://muchs.cn/article12/docdidc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站建設(shè)、軟件開發(fā)、App設(shè)計網(wǎng)站建設(shè)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司