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工厂模式 简书_工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPU 共享内存bank冲突(share
- 下一篇: wpf 文件上传到服务器_07-文件上传