中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

寶安做棋牌網(wǎng)站建設(shè)哪家公司收費(fèi)合理天津優(yōu)化加盟

寶安做棋牌網(wǎng)站建設(shè)哪家公司收費(fèi)合理,天津優(yōu)化加盟,商業(yè)空間設(shè)計(jì)心得體會(huì),無錫市建設(shè)工程質(zhì)量監(jiān)督站網(wǎng)站工廠模式 工廠設(shè)計(jì)模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種封裝對(duì)象創(chuàng)建過程的機(jī)制,將對(duì)象的創(chuàng)建與使用分離。 這種設(shè)計(jì)模式允許我們?cè)诓恍薷目蛻舳舜a的情況下引入新的對(duì)象類型。 在Java中,工廠設(shè)計(jì)模式主要有三種形式:簡(jiǎn)單工廠…

工廠模式

工廠設(shè)計(jì)模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種封裝對(duì)象創(chuàng)建過程的機(jī)制,將對(duì)象的創(chuàng)建與使用分離。
這種設(shè)計(jì)模式允許我們?cè)诓恍薷目蛻舳舜a的情況下引入新的對(duì)象類型。
在Java中,工廠設(shè)計(jì)模式主要有三種形式:簡(jiǎn)單工廠模式、工廠方法模式和抽象工廠模式。

簡(jiǎn)單工廠模式

用來生成同一等級(jí)結(jié)構(gòu)中的任意產(chǎn)品。

注:對(duì)增加新的產(chǎn)品需要修改已有的代碼,這違背了面向?qū)ο笤O(shè)計(jì)原則中的開閉原則(對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉)

UML

在這里插入圖片描述

實(shí)現(xiàn)代碼

Animal.java

// 定義一個(gè)動(dòng)物的接口
public interface Animal {// 接口中定義一個(gè)抽象的方法:叫聲void makeSound();
}

Cat.java

// 定義一個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)Animal接口
public class Cat implements Animal{// 貓屬于動(dòng)物:實(shí)現(xiàn)發(fā)出叫聲的接口@Overridepublic void makeSound() {System.out.println("喵喵喵");}
}

Dog.java

// 定義一個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)Animal接口
public class Dog implements Animal{// 狗屬于動(dòng)物:實(shí)現(xiàn)發(fā)出叫聲的接口@Overridepublic void makeSound() {System.out.println("汪汪汪");}
}

SimpleAnimalFactory.java

// 定義一個(gè)簡(jiǎn)單工廠類用于創(chuàng)建動(dòng)物
public class SimpleAnimalFactory {// 定義一個(gè)創(chuàng)建動(dòng)物的方法用于生產(chǎn)不同的動(dòng)物的靜態(tài)方法public static Animal createAnimal(String type) {if ("Cat".equalsIgnoreCase(type)) {return new Cat();}else if ("Dog".equalsIgnoreCase(type)) {return new Dog();}else  {return null;}}
}

TestClient.java

public class TestClient {public static void main(String[] args) {// 根據(jù)簡(jiǎn)單工廠創(chuàng)建不同的動(dòng)物,執(zhí)行動(dòng)作// 生產(chǎn)一個(gè)CatAnimal cat = SimpleAnimalFactory.createAnimal("cat");cat.makeSound();// 生產(chǎn)一個(gè)DogAnimal dog = SimpleAnimalFactory.createAnimal("Dog");dog.makeSound();}
}

執(zhí)行結(jié)果:

在這里插入圖片描述

結(jié)論:

簡(jiǎn)單工廠好處在于,對(duì)于客戶端調(diào)用時(shí),我們不需要關(guān)心具體實(shí)現(xiàn),只需要調(diào)用工廠方法,傳入?yún)?shù)獲取我們需要返回的結(jié)果即可。

但是對(duì)于同一個(gè)產(chǎn)品(動(dòng)物),如果我們進(jìn)行新增(豬),則必須要修改Factory中createAnimal(String type)方法。因此違背了開閉原則

工廠方法模式

用來生產(chǎn)同一等級(jí)結(jié)構(gòu)中的固定產(chǎn)品。

支持增加任意產(chǎn)品,滿足開閉原則,但設(shè)計(jì)相對(duì)于簡(jiǎn)單工廠復(fù)雜一些

UML

在這里插入圖片描述

實(shí)現(xiàn)代碼

Product.java

// 定義一個(gè)產(chǎn)品接口
public interface Product {//定義一個(gè)抽象的使用的方法void use();
}

ProductA.java

// ProductA實(shí)現(xiàn)Product接口
public class ProductA implements Product{@Overridepublic void use() {System.out.println("ProductA 使用了");}
}

ProductB.java

// ProductB實(shí)現(xiàn)Product接口
public class ProductB implements Product{@Overridepublic void use() {System.out.println("ProductB 使用了");}
}

ProductFactory.java

// 定義一個(gè)ProductFactory工廠接口
public interface ProductFactory {// 接口中定義一個(gè)創(chuàng)建Product的方法Product createProduct();
}

ProductAFactory.java

// 創(chuàng)建一個(gè)ProductA的工廠,實(shí)現(xiàn)ProductFactory接口,用于生產(chǎn)ProductA
public class ProductAFactory implements ProductFactory{@Overridepublic Product createProduct() {return new ProductA();}
}

ProductBFactory.java

// 創(chuàng)建一個(gè)ProductB的工廠,實(shí)現(xiàn)ProductFactory接口,用于生產(chǎn)ProductB
public class ProductBFactory implements ProductFactory{@Overridepublic Product createProduct() {return new ProductB();}
}

TestClient.java

public class TestClient {public static void main(String[] args) {// 創(chuàng)建ProductAProduct product1 = new ProductAFactory().createProduct();product1.use();// 創(chuàng)建ProductBProduct product2 = new ProductBFactory().createProduct();product2.use();}
}

執(zhí)行結(jié)果:

在這里插入圖片描述

從工廠方式模式,我們可以看出,我們可以任意增加同一產(chǎn)品,而不會(huì)影響到原來已有產(chǎn)品
(創(chuàng)建一個(gè)產(chǎn)品C繼承Product接口,創(chuàng)建一個(gè)產(chǎn)品C的Factory類生產(chǎn)C,使用是通過相應(yīng)Factory調(diào)用生產(chǎn)C即可)。
如果產(chǎn)品中新增一個(gè)方法,則所有實(shí)現(xiàn)了Product接口的方法都必須修改相應(yīng)方法。

抽象工廠模式

用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。

對(duì)增加新的產(chǎn)品無能為力,支持增加產(chǎn)品族

UML

在這里插入圖片描述

實(shí)現(xiàn)代碼

Engine.java

// 定義發(fā)動(dòng)機(jī)接口
public interface Engine {// 定義發(fā)動(dòng)機(jī) 發(fā)動(dòng)方法void run();// 定義發(fā)動(dòng)機(jī) 停止方法void stop();
}

HighEndEngine.java

// 創(chuàng)建一個(gè)高端發(fā)動(dòng)機(jī)實(shí)現(xiàn)發(fā)動(dòng)機(jī)
public class HighEndEngine implements Engine{@Overridepublic void run() {System.out.println("高端發(fā)動(dòng)機(jī)-跑的快");}@Overridepublic void stop() {System.out.println("高端發(fā)動(dòng)機(jī)-剎車性能強(qiáng)");}
}

LowEndEngine.java

// 創(chuàng)建一個(gè)低端發(fā)動(dòng)機(jī)實(shí)現(xiàn)發(fā)動(dòng)機(jī)
public class LowEndEngine implements Engine{@Overridepublic void run() {System.out.println("低端發(fā)動(dòng)機(jī)-跑的慢");}@Overridepublic void stop() {System.out.println("低端發(fā)動(dòng)機(jī)-剎車性能弱");}
}

CarBody.java

// 定義一個(gè)車身接口
public interface CarBody {// 定義一個(gè)乘坐的方法void ride();
}

HighEndCarBody.java

// 創(chuàng)建一個(gè)高端車身實(shí)現(xiàn)車身
public class HighEndCarBody implements CarBody{@Overridepublic void ride() {System.out.println("高端車身-奢華-安全");}
}

LowEndCarBody.java

// 創(chuàng)建一個(gè)低端車身實(shí)現(xiàn)車身
public class LowEndCarBody implements CarBody{@Overridepublic void ride() {System.out.println("低端車身-樸素-看起來安全");}
}

Tyre.java

// 定義一個(gè)輪胎接口
public interface Tyre {// 定義輪胎轉(zhuǎn)動(dòng)的方法void run();
}

HighEndTyre.java

// 創(chuàng)建一個(gè)高端輪胎實(shí)現(xiàn)輪胎
public class HighEndTyre implements Tyre{@Overridepublic void run() {System.out.println("高端輪胎-太空材料-安全-耐磨");}
}

LowEndTyre.java

// 創(chuàng)建一個(gè)低端輪胎實(shí)現(xiàn)輪胎
public class LowEndTyre implements Tyre{@Overridepublic void run() {System.out.println("低端輪胎-普通材料-易磨損");}
}

CarFactory.java

// 定義Car的接口
public interface CarFactory {// 創(chuàng)建發(fā)動(dòng)機(jī)Engine engine();// 創(chuàng)建車身CarBody carBody();// 創(chuàng)建輪胎Tyre tyre();
}

HighEndCarBody.java

// 高端汽車工廠實(shí)現(xiàn)汽車工廠
public class HighEndCarFactory implements CarFactory{@Overridepublic Engine engine() {return new HighEndEngine();}@Overridepublic CarBody carBody() {return new HighEndCarBody();}@Overridepublic Tyre tyre() {return new HighEndTyre();}
}

LowEndCarFactory.java

// 低端汽車工廠實(shí)現(xiàn)汽車工廠
public class LowEndCarFactory implements CarFactory{@Overridepublic Engine engine() {return new LowEndEngine();}@Overridepublic CarBody carBody() {return new LowEndCarBody();}@Overridepublic Tyre tyre() {return new LowEndTyre();}
}

TestClient.java

public class TestClient {public static void main(String[] args) {// 使用高端汽車工廠類 創(chuàng)建高端汽車HighEndCarFactory highEndCar = new HighEndCarFactory();highEndCar.engine().stop();highEndCar.carBody().ride();highEndCar.tyre().run();System.out.println("==========================");// 使用低端汽車工廠類 創(chuàng)建低端汽車LowEndCarFactory lowEndCar = new LowEndCarFactory();lowEndCar.engine().stop();lowEndCar.carBody().ride();lowEndCar.tyre().run();}
}

執(zhí)行結(jié)果:

在這里插入圖片描述

抽象工廠,不可以增加產(chǎn)品(比如:CarFactory一旦定下了,如果我們要新增新的部件則所有實(shí)現(xiàn)CarFactory的類都需實(shí)現(xiàn)該方法)。
但是抽象工廠,可以根據(jù)已有的接口,創(chuàng)建更多的產(chǎn)品族(比如:定義一個(gè)中端汽車工廠,調(diào)用高端發(fā)動(dòng)機(jī),低端輪胎,低端車身,等任意組合成新的Factory)

對(duì)比及應(yīng)用場(chǎng)景

簡(jiǎn)單工廠模式

  • 優(yōu)點(diǎn):
    • 實(shí)現(xiàn)了對(duì)象的創(chuàng)建和使用的責(zé)任分割,客戶端只需要傳入正確的參數(shù),就可以獲取需要的對(duì)象,無需知道創(chuàng)建細(xì)節(jié)。
    • 工廠類中有必要的判斷邏輯,可以決定根據(jù)當(dāng)前的參數(shù)創(chuàng)建對(duì)應(yīng)的產(chǎn)品實(shí)例,客戶端可以免除直接創(chuàng)建產(chǎn)品對(duì)象的責(zé)任。
  • 缺點(diǎn):
    • 工廠類職責(zé)過重,如果產(chǎn)品種類增加,工廠類的代碼會(huì)變得龐大且復(fù)雜,不利于維護(hù)。
    • 簡(jiǎn)單工廠模式違背了開放封閉原則,因?yàn)槊看卧黾有庐a(chǎn)品時(shí),都需要修改工廠類的代碼。
  • 適用場(chǎng)景:
    • 創(chuàng)建對(duì)象較少,且對(duì)象的創(chuàng)建邏輯不復(fù)雜時(shí)。
    • 客戶端不關(guān)心對(duì)象的創(chuàng)建過程,只關(guān)心使用對(duì)象時(shí)。

工廠方法模式

  • 優(yōu)點(diǎn):
    • 將對(duì)象的創(chuàng)建推遲到子類中進(jìn)行,使得類的實(shí)例化更加靈活和可擴(kuò)展。
    • 降低了客戶端與具體產(chǎn)品類之間的耦合度,客戶端只需要知道對(duì)應(yīng)的工廠,無需知道具體的產(chǎn)品類。
  • 缺點(diǎn):
    • 增加了系統(tǒng)的抽象性和理解難度,需要引入額外的工廠接口和工廠類。
    • 如果產(chǎn)品類較少,使用工廠方法模式可能會(huì)增加不必要的復(fù)雜性。
  • 適用場(chǎng)景:
    • 需要?jiǎng)?chuàng)建大量相似對(duì)象時(shí),可以使用工廠方法模式來簡(jiǎn)化對(duì)象的創(chuàng)建過程。
    • 當(dāng)一個(gè)類需要由其子類來指定創(chuàng)建哪個(gè)對(duì)象時(shí),可以使用工廠方法模式。
    • 但實(shí)際開發(fā)中,簡(jiǎn)單工廠比工廠方法使用的更多

抽象工廠模式

  • 優(yōu)點(diǎn):
    • 提供了創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,無需指定它們具體的類。
    • 增加了系統(tǒng)的靈活性和可擴(kuò)展性,可以通過更換不同的工廠來實(shí)現(xiàn)不同的產(chǎn)品族。
  • 缺點(diǎn):
    • 規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合,產(chǎn)品族中擴(kuò)展新的產(chǎn)品困難。
    • 如果產(chǎn)品族中的產(chǎn)品較少,使用抽象工廠模式可能會(huì)導(dǎo)致代碼冗余和復(fù)雜性增加。
  • 適用場(chǎng)景:
    • 當(dāng)需要?jiǎng)?chuàng)建一組相互關(guān)聯(lián)或相互依賴的對(duì)象時(shí),可以使用抽象工廠模式。
    • 當(dāng)一個(gè)系統(tǒng)需要獨(dú)立地變化其創(chuàng)建的對(duì)象時(shí),抽象工廠模式是一個(gè)很好的選擇。

gitee源碼

git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git

http://www.risenshineclean.com/news/29772.html

相關(guān)文章:

  • 淄博網(wǎng)站優(yōu)化資訊在線seo超級(jí)外鏈工具
  • 政府網(wǎng)站建設(shè)管理意見網(wǎng)絡(luò)營(yíng)銷什么意思
  • 寫出網(wǎng)站建設(shè)步驟seo優(yōu)化廠商
  • 銷售網(wǎng)站制作怎么做品牌整合營(yíng)銷
  • 外貿(mào)平臺(tái)有哪些是免費(fèi)的直接可以發(fā)布售賣產(chǎn)品的關(guān)鍵詞自動(dòng)優(yōu)化工具
  • 二手商品交易網(wǎng)站開發(fā)百度搜索引擎廣告
  • wordpress+調(diào)用+編輯器長(zhǎng)沙官網(wǎng)seo技術(shù)
  • 網(wǎng)站空間大小選擇百度怎么投放自己的廣告
  • 免費(fèi)行情軟件網(wǎng)站有哪些sem競(jìng)價(jià)外包公司
  • 騰訊云可以做網(wǎng)站嗎3百度網(wǎng)盤免費(fèi)下載
  • 沈陽(yáng)市網(wǎng)站制作廣東省人大常委會(huì)
  • 一級(jí)a做爰網(wǎng)站下載代發(fā)軟文
  • 深圳光明廣州網(wǎng)絡(luò)seo優(yōu)化
  • 使用免費(fèi)的代碼做網(wǎng)站品牌廣告
  • 公司企業(yè)網(wǎng)站制作教程推廣專家
  • 網(wǎng)站開發(fā)常見問題總結(jié)百度收錄關(guān)鍵詞查詢
  • 成都模板建站代理seo站長(zhǎng)工具下載
  • 木工支模價(jià)格明細(xì)表搜索引擎優(yōu)化的流程是什么
  • 自己做網(wǎng)站哪種好做搜索引擎優(yōu)化的策略主要有
  • 網(wǎng)站建設(shè)江門游戲代理加盟
  • 河南平臺(tái)網(wǎng)站建設(shè)價(jià)位百度網(wǎng)站網(wǎng)址是多少
  • 深圳定制網(wǎng)站制作費(fèi)用百度智能建站系統(tǒng)
  • 網(wǎng)站開發(fā)技術(shù)實(shí)驗(yàn)教程seo推廣優(yōu)化的方法
  • 漢中門戶網(wǎng)工程招標(biāo)杭州seo網(wǎng)站哪家好
  • 高端網(wǎng)站建設(shè)費(fèi)用深圳網(wǎng)絡(luò)推廣公司哪家好
  • 個(gè)人接做網(wǎng)站多少錢app優(yōu)化方案
  • 汕頭有建網(wǎng)站公司嗎seo案例
  • 公司和網(wǎng)站備案查詢密碼網(wǎng)絡(luò)營(yíng)銷和傳統(tǒng)營(yíng)銷的區(qū)別有哪些
  • 宣傳片視頻西安seo排名
  • wordpress采集網(wǎng)頁(yè)文章安卓?jī)?yōu)化大師app下載