日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

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

一天一种设计模式之六-----工厂方法模式

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

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

一.工廠方法模式

  • 工廠方法模式屬于創(chuàng)建型模式。

  • 工廠方法模式定義:定義一個(gè)用于創(chuàng)建對(duì)象的借口,讓子類決定實(shí)例化哪一個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到了他的子類。

  • 一般工廠類會(huì)有一個(gè)工廠的接口,實(shí)現(xiàn)類也有一個(gè)實(shí)現(xiàn)的接口。工廠接口負(fù)責(zé)定義一個(gè)創(chuàng)建實(shí)現(xiàn)接口的方法,而工廠類負(fù)責(zé)創(chuàng)建具體的實(shí)現(xiàn)類。

  • 工廠模式根據(jù)抽象程度的不同分為三種:簡(jiǎn)單工廠模式(也叫靜態(tài)工廠模式),工廠方法模式以及抽象工廠模式。工廠模式是編程中經(jīng)常會(huì)遇到的一種模式。

  • 工廠方法模式的優(yōu)點(diǎn)有:

  • 使代碼結(jié)構(gòu)清晰,有效的封裝變化。在編程中,產(chǎn)品類的實(shí)例化有時(shí)候是復(fù)雜多變的,通過(guò)工廠模式將產(chǎn)品的實(shí)例化封裝起來(lái),是的調(diào)用者無(wú)需關(guān)心實(shí)例化過(guò)程只需依賴工廠即可得到自己想要的產(chǎn)品。

  • 對(duì)調(diào)用者屏蔽具體的產(chǎn)品類。如果使用工廠模式,調(diào)用者只需要關(guān)心產(chǎn)品的接口就可以了,即使變更了具體的實(shí)現(xiàn),對(duì)調(diào)用這來(lái)說(shuō)沒有任何影響。

  • 工廠方法模式符合開放封閉原則,迪米特法則,依賴倒置原則。

    二.測(cè)試代碼

  • 測(cè)試代碼如下(實(shí)現(xiàn)一個(gè)計(jì)算器)下屬模式中,如果新增了其他的計(jì)算類,只需要新建一個(gè)計(jì)算類實(shí)現(xiàn),和相應(yīng)的計(jì)算類工廠就可以了。

  • public?class?GongChangMethodTest?{public?static?void?main(String[]?args)?{IFactory?factory?=?new?SumFactory();Jisuan?jisuan?=?factory.createJisuan();jisuan.setNum1(12);jisuan.setNum2(44);;System.out.println(jisuan.getResult());} }interface?IFactory?{Jisuan?createJisuan(); }class?SumFactory?implements?IFactory?{@Overridepublic?Jisuan?createJisuan()?{return?new?SumJisuan();}}class?SubFactory?implements?IFactory?{@Overridepublic?Jisuan?createJisuan()?{return?new?SubJisuan();} }class?MulFactory?implements?IFactory?{@Overridepublic?Jisuan?createJisuan()?{return?new?MulJisuan();} }class?DevFactory?implements?IFactory?{@Overridepublic?Jisuan?createJisuan()?{return?new?DevJisuan();} }abstract?class?Jisuan?{private?int?num1;private?int?num2;public?Jisuan()?{}public?Jisuan(int?num1,?int?num2)?{this.num1?=?num1;this.num2?=?num2;}public?abstract?int?getResult();public?int?getNum1()?{return?num1;}public?void?setNum1(int?num1)?{this.num1?=?num1;}public?int?getNum2()?{return?num2;}public?void?setNum2(int?num2)?{this.num2?=?num2;} }class?SumJisuan?extends?Jisuan?{@Overridepublic?int?getResult()?{return?getNum1()?+?getNum2();}}class?SubJisuan?extends?Jisuan?{@Overridepublic?int?getResult()?{return?getNum1()?-?getNum2();} }class?MulJisuan?extends?Jisuan?{@Overridepublic?int?getResult()?{return?getNum1()?*?getNum2();} }class?DevJisuan?extends?Jisuan?{@Overridepublic?int?getResult()?{int?result?=?0;if?(getNum2()?!=?0)?{result?=?getNum1()?/?getNum2();}return?result;} }
  • 企業(yè)級(jí)應(yīng)用中,我們對(duì)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)就可以采用上述模式
    實(shí)際上,我們?cè)偌由掀渌?#xff0c;IFactory中再增加createXXXFactory就成了抽象工廠模式了,抽象工廠只是比工廠方法多了一個(gè)緯度而已

  • public?class?GongChangMethodTest?{public?static?void?main(String[]?args)?{IFactory?factory=new?MysqlUserFactory();IUserService?service=factory.createUserService();service.insert();} } interface?IUserService{void?insert(); } class?UserService?implements?IUserService{@Overridepublic?void?insert()?{System.out.println("insert?方法");} } interface?IFactory{public?IUserService?createUserService(); } abstract?class?MysqlFactory?implements?IFactory{//這里可以做一些初始化mysql連接的事情 } abstract?class?SqlServerFactory?implements?IFactory{//這里可以做一些初始化mysql連接的事情 } //如果想換成sqlserver,只需要加一個(gè)SqlserverUserFactory就可以了 class?MysqlUserFactory?extends?MysqlFactory{@Overridepublic?IUserService?createUserService()?{return?new?UserService();}}



























    轉(zhuǎn)載于:https://my.oschina.net/u/2323537/blog/636408

    總結(jié)

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

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