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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python工厂模式 简书_工厂模式

發布時間:2025/3/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python工厂模式 简书_工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是工廠設計模式?

定義一個用于創建對象的接口,讓子類決定將哪一個類實例化,專門用來生產對象。在java中,萬物皆對象,這些對象都需要創建,如果創建的時候直接new該對象,就會對該對象耦合嚴重,假如我們要更換對象,所有new對象的地方都需要修改一遍,這顯然違背了軟件設計的開閉原則,如果我們使用工廠來生產對象,我們就只和工廠打交道就可以了,徹底和對象解耦,如果要更換對象,直接在工廠里更換該對象即可,達到了與對象解耦的目的。

工廠模式的優點

工廠模式是為了解耦。將對象的創建和使用分離,把對象的創建和使用的過程分開,Class A 想調用 Class B ,那么A只是調用B的方法,而至于B的實例化,就交給工廠類。

工廠模式可以降低代碼重復。如果創建對象B的過程都很復雜,需要一定的代碼量,而且很多地方都要用到,那么就會有很多的重復代碼。我們可以這些創建對象B的代碼放到工廠里統一管理。既減少了重復代碼,也方便以后對B的創建過程的修改維護。(當然,我個人覺得也可以把這些創建過程的代碼放到類的構造函數里,同樣可以降低重復率,而且構造函數本身的作用也是初始化對象。不過,這樣也會導致構造函數過于復雜,做的事太多,不符合java 的設計原則。)

可以通過參數設置,返回不同的構造函數,不需要修改使用類的地方。如果一個類有多個構造方法(構造的重寫),我們也可以將它抽出來,放到工廠中,一個構造方法對應一個工廠方法并命名一個友好的名字,這樣我們就不再只是根據參數的不同來判斷,而是可以根據工廠的方法名來直觀判斷將要創建的對象的特點。這對于使用者來說,體驗比較好

使用場景

消費者不關心它所要創建對象的類(產品類)的時候。

消費者知道它所要創建對象的類(產品類),但不關心如何創建的時候。

工廠的具體實現

角色

Product(抽象產品):它是定義產品的接口,是工廠方法模式所創建對象的超類型,也就是產品對象的公共父類

ConcreteProduct(具體產品):它實現了抽象產品接口,某種類型的具體產品由專門的具體工廠創建,具體工廠和具體產品之間一一對應。

Factory(抽象工廠):在抽象工廠類中,聲明了工廠方法(Factory Method),用于返回一個產品。抽象工廠是工廠方法模式的核心,所有創建對象的工廠類都必須實現該接口。

ConcreteFactory(具體工廠):它是抽象工廠類的子類,實現了抽象工廠中定義的工廠方法,并可由客戶端調用,返回一個具體產品類的實例。

示例

抽象產品類 Video

abstract class Video {

public abstract void produce();

}

具體產品類 JavaVideo和PythonVideo

class JavaVideo extends Video {

@Override

public void produce() {

System.out.println("錄制Java課程視頻");

}

}

class PythonVideo extends Video {

@Override

public void produce() {

System.out.println("錄制Python課程視頻");

}

}

抽象工廠類 VideoFactory

interface VideoFacotry {

public Video getVideo();

}

具體工廠類 JavaVideoFactory和PythonVideoFatory

class JavaVideoFactory implements VideoFacotry {

@Override

public Video getVideo() {

return new JavaVideo();

}

}

class PythonVideoFatory implements VideoFacotry {

@Override

public Video getVideo() {

return new PythonVideo();

}

}

客戶端調用

public class Factory {

public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {

VideoFacotry javaVideoFactory = new JavaVideoFactory();

VideoFacotry pythonVideoFactory = new PythonVideoFatory();

Video javaVedio = javaVideoFactory.getVideo();

javaVedio.produce();

Video pythonVedio = pythonVideoFactory.getVideo();

pythonVedio.produce();

String factoryName = "com.example.designpattern.factory.JavaVideoFactory";

// 通過反射機制獲取工廠類

Class> clazz = Class.forName(factoryName);

JavaVideoFactory instance = (JavaVideoFactory) clazz.newInstance();

// 生產產品

instance.getVideo().produce();

}

}

總結

以上是生活随笔為你收集整理的python工厂模式 简书_工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。