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

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

生活随笔

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

asp.net

[设计模式]工厂模式factory

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

參考:http://wxg6203.iteye.com/blog/740229

?

簡(jiǎn)單工廠模式(simple factory)是類(lèi)的創(chuàng)建模式,又叫靜態(tài)工廠方法(static factory method)模式。

簡(jiǎn)單工廠模式就是由一個(gè)工廠類(lèi)根據(jù)傳入的參數(shù)決定創(chuàng)建哪一種的產(chǎn)品類(lèi)。

?

有4個(gè)角色

?

工廠類(lèi)角色:是具體產(chǎn)品類(lèi)角色直接調(diào)用者。?

抽象產(chǎn)品角色:接口或抽象類(lèi),負(fù)責(zé)具體產(chǎn)品角色的定義,及與客戶端的交互。?

具體產(chǎn)品角色:被工廠類(lèi)創(chuàng)建的對(duì)象,也是客戶端實(shí)際操作對(duì)象。?

客戶端:調(diào)用工廠類(lèi)產(chǎn)生實(shí)例,并調(diào)用實(shí)例的方法進(jìn)行相應(yīng)工作。

?

public interface people{public void say();}public class chinese implements people{public void say(){System.out.println("說(shuō)中國(guó)話");}}public class american implements people{public void say(){System.out.println("speak english");}}public class peopleFactory{public static people create(int type){if(type==1){return new chinese();}else if(type==2){return new american();}}}public class test{public static void main(String []args){people p=peopleFactory.create(1);p.say();p=peopleFactory.create(2);p.say();}}

?

?

?

?

工廠方法模式是簡(jiǎn)單工廠模式的衍生,解決了許多簡(jiǎn)單工廠模式的問(wèn)題。

首先完全實(shí)現(xiàn)‘開(kāi)-閉 原則’,實(shí)現(xiàn)了可擴(kuò)展。其次更復(fù)雜的層次結(jié)構(gòu),可以應(yīng)用于產(chǎn)品結(jié)果復(fù)雜的場(chǎng)合。   

工廠方法模式的對(duì)簡(jiǎn)單工廠模式進(jìn)行了抽象。有一個(gè)抽象的Factory類(lèi)(可以是抽象類(lèi)和接口),這個(gè)類(lèi)將不在負(fù)責(zé)具體的產(chǎn)品生產(chǎn),而是只制定一些規(guī)范,具體的生產(chǎn)工作由其子類(lèi)去完成。在這個(gè)模式中,工廠類(lèi)和產(chǎn)品類(lèi)往往可以依次對(duì)應(yīng)。即一個(gè)抽象工廠對(duì)應(yīng)一個(gè)抽象產(chǎn)品,一個(gè)具體工廠對(duì)應(yīng)一個(gè)具體產(chǎn)品,這個(gè)具體的工廠就負(fù)責(zé)生產(chǎn)對(duì)應(yīng)的產(chǎn)品。   

工廠方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)應(yīng)用。

?

?如圖:

?

?

基于面向接口編程的原理,創(chuàng)建部分成為抽象工廠與實(shí)體工廠,創(chuàng)建出的對(duì)象成為抽象產(chǎn)品與實(shí)體產(chǎn)品。你可能知道為什么它能解決上面的問(wèn)題了:多了一個(gè)新對(duì)象,只需添加一套對(duì)應(yīng)的工廠和產(chǎn)品就可以了,不需要修改原代碼,或只需進(jìn)行少量的修改。

?

具體:

實(shí)體工廠實(shí)現(xiàn)抽象工廠,實(shí)體產(chǎn)品實(shí)現(xiàn)抽象產(chǎn)品;抽象工廠生產(chǎn)抽象產(chǎn)品,實(shí)體工廠生產(chǎn)實(shí)體產(chǎn)品;實(shí)體工廠A生產(chǎn)實(shí)體產(chǎn)品A,實(shí)體工廠B生產(chǎn)實(shí)體產(chǎn)品B。

?

public interface Icar{public void docar();}public class bwm implements Icar{public void docar(){System.out.println("我是寶馬,別摸我");}}public class buick implements Icar{public void docar(){System.out.println("我是別克,很酷");}}public interface Icarfactory{public Icar createCar();} public class bmwFactory implements Icarfactory{public Icar createCar(){return new bwm();}} public class buickFactory implements Icarfactory{public Icar createCar(){return new buick();}} public class test{public static void main(String []args){Icarfactory factory=new bmwFactory();Icar bwm= factory.createCar(); bwm.docar();factory=new buickFactory();Icar buick= factory.createCar(); buick.docar();}}

?

抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。

抽象工廠模式是指當(dāng)有多個(gè)抽象角色時(shí),使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個(gè)接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。根據(jù)LSP原則,任何接受父類(lèi)型的地方,都應(yīng)當(dāng)能夠接受子類(lèi)型。因此,實(shí)際上系統(tǒng)所需要的,僅僅是類(lèi)型與這些抽象產(chǎn)品角色相同的一些實(shí)例,而不是這些抽象產(chǎn)品的實(shí)例。換言之,也就是這些抽象產(chǎn)品的具體子類(lèi)的實(shí)例。工廠類(lèi)負(fù)責(zé)創(chuàng)建抽象產(chǎn)品的具體子類(lèi)的實(shí)例。

?

簡(jiǎn)介

??? ?當(dāng)每個(gè)抽象產(chǎn)品都有多于一個(gè)的具體子類(lèi)的時(shí)候,工廠角色怎么知道實(shí)例化哪一個(gè)子類(lèi)呢?比如每個(gè)抽象產(chǎn)品角色都有兩個(gè)具體產(chǎn)品。抽象工廠模式提供兩個(gè)具體工廠角色,分別對(duì)應(yīng)于這兩個(gè)具體產(chǎn)品角色,每一個(gè)具體工廠角色只負(fù)責(zé)某一個(gè)產(chǎn)品角色的實(shí)例化。每一個(gè)具體工廠類(lèi)只負(fù)責(zé)創(chuàng)建抽象產(chǎn)品的某一個(gè)具體子類(lèi)的實(shí)例。

  每一個(gè)模式都是針對(duì)一定問(wèn)題的解決方案,工廠方法模式針對(duì)的是一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu);而抽象工廠模式針對(duì)的是多個(gè)產(chǎn)品等級(jí)結(jié)果。

轉(zhuǎn)載于:https://www.cnblogs.com/lyggqm/p/7098698.html

總結(jié)

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

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