小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

2.工廠模式

 印度阿三17 2019-02-25

?工廠模式?

.核心本質(zhì):

? -實例化對象,用工廠方法代替new操作。

? -將選擇實現(xiàn)類,創(chuàng)建對象統(tǒng)一管理和控制。從而將調(diào)用者跟我們的現(xiàn)實類解耦。

?

簡單工廠:

? ? 1.簡單工廠模式也叫靜態(tài)工廠模式,就是工廠類一般是使用靜態(tài)方法,

通過接收的參數(shù)的不同來返回不同的對象實例。

? ?2.缺點:擴展性非常的差,增加新產(chǎn)品必須修改代碼。

?

??

?

?代碼:

car接口:

public interface Car {
void run();
}

?

兩個實現(xiàn)類奧迪和比亞迪:

public class Audi implements Car {

@Override
public void run() {
? ?System.out.println("奧迪再跑!");
}

}

?

public class Byd implements Car {

@Override
public void run() {
System.out.println("比亞迪再跑!");
}

}

工廠類:

//根據(jù)傳入的字符串判斷,是生產(chǎn)奧迪還是比亞迪

public class CarFactory {

public static Car createCar(String type){
if("奧迪".equals(type)){
return new Audi();
}else if("比亞迪".equals(type)){
return new Byd();
}else{
return null;
}
}

}

?

調(diào)用者代碼:

public class Client02 { //調(diào)用者

public static void main(String[] args) {
Car c1 =CarFactory.createCar("奧迪");
Car c2 = CarFactory.createCar("比亞迪");

c1.run();
c2.run();

}
}

?

可以分析出,簡單工廠模式擴展性是非常的差,不符合開閉原則,如果需要新增產(chǎn)品,則需要更改工廠類的代碼。

?

?

工廠模式:

– 完全滿足OCP,擴展性非常的優(yōu)秀。
– 工廠方法模式和簡單工廠模式最大的不同在于,簡單工廠模式只有一個(對于一個項目
或者一個獨立模塊而言)工廠類,而工廠方法模式有一組實現(xiàn)了相同接口的工廠類。

?

代碼如下:

car接口:

public interface Car {
void run();
}

?

三個例子,具體的car的實現(xiàn)類:
public class Audi implements Car {

@Override
public void run() {
System.out.println("奧迪再跑!");
}

}

?


public class Benz implements Car {

@Override
public void run() {
System.out.println("奔馳再跑!");
}

}

?

?

public class Byd implements Car {

@Override
public void run() {
System.out.println("比亞迪再跑!");
}

}

?

?

car的工廠類接口:?


public interface CarFactory {
Car createCar();
}

?

?三個具體實現(xiàn)的工廠:

public class AudiFactory implements CarFactory {

@Override
public Car createCar() {
return new Audi();
}

}


public class BenzFactory implements CarFactory {

@Override
public Car createCar() {
return new Benz();
}

}

調(diào)用者類:
public class Client {
public static void main(String[] args) {
Car c1 = new AudiFactory().createCar();
Car c2 = new BydFactory().createCar();

c1.run();
c2.run();
}
}

?

簡單工廠模式和工廠方法模式PK:

– 結(jié)構(gòu)復(fù)雜度
從這個角度比較,顯然簡單工廠模式要占優(yōu)。簡單工廠模式只需一個工廠類,而工廠方法模式的工廠類隨著產(chǎn)品類個
數(shù)增加而增加,這無疑會使類的個數(shù)越來越多,從而增加了結(jié)構(gòu)的復(fù)雜程度。
– 代碼復(fù)雜度
代碼復(fù)雜度和結(jié)構(gòu)復(fù)雜度是一對矛盾,既然簡單工廠模式在結(jié)構(gòu)方面相對簡潔,那么它在代碼方面肯定是比工廠方法
模式復(fù)雜的了。簡單工廠模式的工廠類隨著產(chǎn)品類的增加需要增加很多方法(或代碼),而工廠方法模式每個具體工
廠類只完成單一任務(wù),代碼簡潔。
– 客戶端編程難度
工廠方法模式雖然在工廠類結(jié)構(gòu)中引入了接口從而滿足了OCP(開閉原則),但是在客戶端編碼中需要對工廠類進行實例化。而簡
單工廠模式的工廠類是個靜態(tài)類,在客戶端無需實例化,這無疑是個吸引人的優(yōu)點。
– 管理上的難度
這是個關(guān)鍵的問題。
我們先談擴展。眾所周知,工廠方法模式完全滿足OCP,即它有非常良好的擴展性。那是否就說明了簡單工廠模式就
沒有擴展性呢?答案是否定的。簡單工廠模式同樣具備良好的擴展性——擴展的時候僅需要修改少量的代碼(修改工
廠類的代碼)就可以滿足擴展性的要求了。盡管這沒有完全滿足OCP,但我們不需要太拘泥于設(shè)計理論,要知道,
sun提供的java官方工具包中也有想到多沒有滿足OCP的例子啊。
然后我們從維護性的角度分析下。假如某個具體產(chǎn)品類需要進行一定的修改,很可能需要修改對應(yīng)的工廠類。當(dāng)同時
需要修改多個產(chǎn)品類的時候,對工廠類的修改會變得相當(dāng)麻煩(對號入座已經(jīng)是個問題了)。反而簡單工廠沒有這些
麻煩,當(dāng)多個產(chǎn)品類需要修改是,簡單工廠模式仍然僅僅需要修改唯一的工廠類(無論怎樣都能改到滿足要求吧?大
不了把這個類重寫)。
· 根據(jù)設(shè)計理論建議:工廠方法模式。但實際上,我們一般都用簡單工廠模式。

?

?

?

?

來源:http://www./content-4-123501.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多