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

歡迎訪問 生活随笔!

生活随笔

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

java

Java设计模式 -- 简单工厂模式(SimpleFactory)

發布時間:2025/3/20 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式 -- 简单工厂模式(SimpleFactory) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是簡單工廠模式

????? 簡單工廠模式屬于類的創建型模式,又叫做靜態工廠方法模式。通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。

二、模式中包含的角色及其職責

1.工廠(Creator)角色簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。
2.抽象(Product)角色簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
3.具體產品(Concrete Product)角色簡單工廠模式所創建的具體實例對象

三、具體實例

現在有兩個類,分別是Apple和Banana,都有一個Get方法:

Apple.java

package cc.dewdrop;public class Apple{public void get(){System.out.println("采集蘋果");} }

?Banana.java

package cc.dewdrop;public class Banana{public void get(){System.out.println("采集香蕉");} }

?在主方法中實例化并分別調用個體方法:

package cc.dewdrop;public class SimpleFactory {public static void main(String[] args) {Apple apple = new Apple();Banana banana = new Banana();apple.get();banana.get();} }

?發現兩個類都有一個共同的get方法,那么我們就可以抽象出一個接口,然后Apple和Banana兩個類分別實現這個接口:

Fruit.java

package cc.dewdrop;public interface Fruit {public void get(); }

?Apple.java

package cc.dewdrop;public class Apple implements Fruit{public void get(){System.out.println("采集蘋果");} }

?Banana.java

package cc.dewdrop;public class Banana implements Fruit{public void get(){System.out.println("采集香蕉");} }

?在主方法中就可以使用下面這種方式來創建對象:

public class SimpleFactory {public static void main(String[] args) {Fruit apple = new Apple();Fruit banana = new Banana();apple.get();banana.get();} }

?根據簡單工廠模式的特點,現在就需要創建一個類來創建類的對象:

FruitFactory.java

package cc.dewdrop;public class FruitFactory {/*** 獲得Apple實例*/public Fruit getApple() {return new Apple();}/*** 獲得Banana實例*/public Fruit getBanana() {return new Banana();} }

?在主方法中就可以使用如下方式進行調用:

public class SimpleFactory {public static void main(String[] args) {Fruit apple = new FruitFactory().getApple();Fruit banana = new FruitFactory().getBanana();apple.get();banana.get();} }

?再進一步,我們可以修改工廠類,使用靜態方法來創建對象:

FruitFactory.java

package cc.dewdrop;public class FruitFactory {/*** 獲得Apple實例*/public static Fruit getApple() {return new Apple();}/*** 獲得Banana實例*/public static Fruit getBanana() {return new Banana();} }

?在主方法中就可以直接使用類名來調用:

public class SimpleFactory {public static void main(String[] args) {Fruit apple = FruitFactory.getApple();Fruit banana = FruitFactory.getBanana();apple.get();banana.get();} }

?進一步改進工廠類,希望有一個公用的方法來創建所有產品的對象:

FruitFactory.java

package cc.dewdrop;public class FruitFactory {public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException {if (type.equalsIgnoreCase("apple")) {return Apple.class.newInstance();} else if (type.equalsIgnoreCase("banana")) {return Banana.class.newInstance();} else {System.out.println("class not found");}return null;} }

?在主方法中使用如下方式調用:

public class SimpleFactory {public static void main(String[] args) {Fruit apple = FruitFactory.getFruit("apple");Fruit banana = FruitFactory.getFruit("banana");apple.get();banana.get();} }

?這樣調用工廠類創建對象的操作就簡化了很多,但是還有一個缺點,就是如果在新增加一個類是,就必須修改工廠類。那么此時工廠類可以做出如下修改:

FruitFactory.java

package cc.dewdrop;public class FruitFactory {public static Fruit getFruit(String type)throws InstantiationException, IllegalAccessException, ClassNotFoundException {return (Fruit) Class.forName(type).newInstance();} }

?需要注意一點的是,在調用的時候需要使用類的完整路徑(包括包名):

public class SimpleFactory {public static void main(String[] args) {Fruit apple = FruitFactory.getFruit("cc.dewdrop.Apple");Fruit banana = FruitFactory.getFruit("cc.dewdrop.Banana");apple.get();banana.get();} }

?四、簡單工廠模式的優缺點

????? 在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需的實例,而無需了解這些對象是如何創建以及如何組織的。有利于整個軟件體系結構的優化
????? 不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由于工廠類集中了所有實例的創建邏輯,所以“高內聚”方面做的并不好。另外,當系統中的具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴展性并不很好。

?

轉載于:https://www.cnblogs.com/zhangtingkuo/p/4715283.html

總結

以上是生活随笔為你收集整理的Java设计模式 -- 简单工厂模式(SimpleFactory)的全部內容,希望文章能夠幫你解決所遇到的問題。

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