日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式-工厂设计模式

發(fā)布時(shí)間:2024/1/1 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-工厂设计模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

做用:** 負(fù)責(zé)創(chuàng)建對(duì)象,使用戶無需考慮對(duì)象的創(chuàng)建細(xì)節(jié),屬于創(chuàng)建型設(shè)計(jì)模式

測(cè)試被用到的類

頂層接口Person類

//頂層接口 public interface Phone {//定義的普通方法public void printName();}

小米手機(jī)實(shí)體類實(shí)現(xiàn)了接口Phone

//小米手機(jī)實(shí)體類實(shí)現(xiàn)了接口Phone public class MiPhone implements Phone {@Overridepublic void printName() {System.out.println("小米手機(jī)被創(chuàng)建。。。。");} }

華為手機(jī)實(shí)體類實(shí)現(xiàn)了接口Phone

//華為手機(jī)實(shí)體類實(shí)現(xiàn)了接口Phone public class HwPhone implements Phone {@Overridepublic void printName() {System.out.println("華為手機(jī)被創(chuàng)建。。。");} }

蘋果手機(jī)實(shí)體類實(shí)現(xiàn)了接口Phone

//蘋果手機(jī)實(shí)體類實(shí)現(xiàn)了接口Phone public class IPhone implements Phone {@Overridepublic void printName() {System.out.println("蘋果手機(jī)被創(chuàng)建。。");} }

簡(jiǎn)單工廠

public class SimpleFactoryPattern {private String Mi = "小米";private String HW = "華為";private String IPhone = "蘋果";public Phone createPerson(String name){if(Mi.equals(name)){return new MiPhone();}else if (HW.equals(name)){return new HwPhone();}else if (IPhone.equals(name)){return new IPhone();}//都不滿足返回nullreturn null;} }

測(cè)試

//測(cè)試簡(jiǎn)單工廠//創(chuàng)建對(duì)象SimpleFactoryPattern simpleFactory = new SimpleFactoryPattern();//通過對(duì)象獲取實(shí)例Phone mi = simpleFactory.createPhone("小米");Phone iPhone = simpleFactory.createPhone("蘋果");Phone HW = simpleFactory.createPhone("華為");//調(diào)用方法測(cè)試mi.printName();iPhone.printName();HW.printName();//測(cè)試結(jié)果:小米手機(jī)被創(chuàng)建。。。。 蘋果手機(jī)被創(chuàng)建。。 華為手機(jī)被創(chuàng)建。。。Process finished with exit code 0

總結(jié):

? 特點(diǎn):

? 在創(chuàng)建對(duì)象時(shí),對(duì)象的創(chuàng)建過程完全由工廠實(shí)現(xiàn),用戶不需要考慮創(chuàng)建細(xì)節(jié)。

? 出現(xiàn)問題:

? 1.當(dāng)我們想再添加同樣的類時(shí),就需要修改工廠內(nèi)的邏輯,違反了開閉原則,不利于擴(kuò)展。

? 2.因?yàn)槭且罁?jù)字符串判斷,不嚴(yán)謹(jǐn),容易出現(xiàn)誤差。

方法工廠

頂層的工廠接口(定義工廠的結(jié)構(gòu))

//最頂層的工廠接口 public interface MethodFactoryPattern {public Phone createPhone();}

蘋果手機(jī)工廠實(shí)現(xiàn)了MethodFactoryPattern工廠

//創(chuàng)建蘋果手機(jī)的工廠 public class IPhoneFactory implements MethodFactoryPattern{@Overridepublic Phone createPhone() {return new IPhone();} }

小米手機(jī)工廠實(shí)現(xiàn)了MethodFactoryPattern工廠

//創(chuàng)建小米手機(jī)的工廠 public class MiFactory implements MethodFactoryPattern{@Overridepublic Phone createPhone() {return new MiPhone();} }

測(cè)試

//測(cè)試方法工廠//獲取蘋果手機(jī)工廠MethodFactoryPattern iPhoneFactory = new IPhoneFactory();//蘋果手機(jī)工廠創(chuàng)建蘋果手機(jī)Phone iPhone = iPhoneFactory.createPhone();iPhone.printName();//獲取小米手機(jī)工廠MethodFactoryPattern miFactory = new MiFactory();//小米手機(jī)工廠創(chuàng)建小米手機(jī)Phone miPhone = miFactory.createPhone();miPhone.printName();//測(cè)試結(jié)果 蘋果手機(jī)被創(chuàng)建。。 小米手機(jī)被創(chuàng)建。。。。Process finished with exit code 0

總結(jié):

? 特點(diǎn):方法工廠模式中對(duì)工廠也定義了抽象,再添加新的產(chǎn)品時(shí),已經(jīng)不需要去修改工廠,而是直 接添加相應(yīng)的工廠,再去添加產(chǎn)品。遵守了開閉原則,有利于程序的擴(kuò)展。

? 問題:類結(jié)構(gòu)體系相對(duì)復(fù)雜,比較難以理解。

測(cè)試抽象工廠添加一套電腦產(chǎn)品測(cè)試類

電腦產(chǎn)品的頂層抽象

//電腦產(chǎn)品的頂層抽象 public interface Computer {public void printName();}

小米電腦實(shí)體類實(shí)現(xiàn)了Computer接口

//小米電腦實(shí)體類實(shí)現(xiàn)了Computer接口 public class MiComputer implements Computer{@Overridepublic void printName() {System.out.println("小米電腦。。。");} }

蘋果電腦實(shí)體類實(shí)現(xiàn)了Computer接口

//蘋果電腦實(shí)體類實(shí)現(xiàn)了Computer接口 public class AppleComputer implements Computer{@Overridepublic void printName() {System.out.println("蘋果電腦創(chuàng)建。。。");} }

華為電腦實(shí)體類實(shí)現(xiàn)了Computer接口

//華為電腦實(shí)體類實(shí)現(xiàn)了Computer接口 public class HWComputer implements Computer {@Overridepublic void printName() {System.out.println("小米電腦。。。");}}

抽象工廠

抽象工廠的頂層接口

public interface AbstractFactory {//創(chuàng)建手機(jī)public Phone createPhone();//創(chuàng)建電腦public Computer createComputer();}

蘋果工廠實(shí)現(xiàn)了AbstractFactory

//蘋果工廠實(shí)現(xiàn)了AbstractFactory public class AppleFactory implements AbstractFactory{@Overridepublic Phone createPhone() {return new IPhone();}@Overridepublic Computer createComputer() {return new AppleComputer();} }

小米工廠實(shí)現(xiàn)了AbstractFactory

//小米公司實(shí)現(xiàn)了AbstractFactory public class MiFactory implements AbstractFactory{@Overridepublic Phone createPhone() {return new MiPhone();}@Overridepublic Computer createComputer() {return new MiComputer();} }

華為公司實(shí)現(xiàn)了AbstractFactory

//華為公司實(shí)現(xiàn)了AbstractFactory public class HWFactory implements AbstractFactory{@Overridepublic Phone createPhone() {return new HwPhone();}@Overridepublic Computer createComputer() {return new HWComputer();} }

測(cè)試

//測(cè)試抽象工廠//如果想買蘋果手機(jī)//獲取蘋果公司AbstractFactory appleFactory = new AppleFactory();//蘋果公司生產(chǎn)蘋果手機(jī)Phone iPhone = appleFactory.createPhone();iPhone.printName();//如果想小米電腦//獲取小米公司AbstractFactory miFactory = new MiFactory();//小米公司生產(chǎn)小米電腦Computer miComputer = miFactory.createComputer();miComputer.printName();//測(cè)試結(jié)果 蘋果手機(jī)被創(chuàng)建。。 小米電腦。。。Process finished with exit code 0

總結(jié)

? 特點(diǎn):

? 將一整個(gè)品牌交由工廠管理,使產(chǎn)品的創(chuàng)建隔離。

? 當(dāng)添加一整套產(chǎn)品組(比如聯(lián)想公司的加入),不需要修改原有代碼。實(shí)現(xiàn)接口即可。

?

? 出現(xiàn)的問題:

? 如果當(dāng)蘋果公司加入新產(chǎn)品,比如平板電腦,就回影響整個(gè)體系結(jié)構(gòu),不利于單個(gè)產(chǎn)品的更改

? 抽象工廠模式只適用于一整套產(chǎn)品組的增加,不適用于單個(gè)產(chǎn)品的維護(hù)

最后總結(jié)

簡(jiǎn)單工廠:

? 不能算是真正意義上的設(shè)計(jì)模式,但可以將客戶程序從具體類解耦,適合類大量重復(fù)的創(chuàng)建。

工廠方法:

? 使用繼承,把對(duì)象的創(chuàng)建委托給子類,由子類來實(shí)現(xiàn)創(chuàng)建方法,適用于產(chǎn)品數(shù)量不穩(wěn)定。

抽象工廠:

? 可以說是將整個(gè)產(chǎn)品組看做成一個(gè)產(chǎn)品,適用于群體類型結(jié)構(gòu)。

工廠模式可以幫助我們針對(duì)抽象/接口編程,而不是針對(duì)具體類編程,在不同的場(chǎng)景下按具體情況來使用

總結(jié)

以上是生活随笔為你收集整理的设计模式-工厂设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。