工廠模式和單例模式是Java編程中常用的兩種設(shè)計(jì)模式,兩者都具有提高代碼復(fù)用、降低耦合度的優(yōu)點(diǎn)。而將工廠模式和單例模式結(jié)合起來(lái)使用,可以更加方便地管理和調(diào)用對(duì)象,提升代碼效率。
在Java中,工廠模式是指通過(guò)一個(gè)工廠類來(lái)創(chuàng)建相應(yīng)的對(duì)象,在該類中可以根據(jù)不同的參數(shù)來(lái)生產(chǎn)不同的對(duì)象實(shí)例。而單例模式是指一個(gè)類只有一個(gè)實(shí)例對(duì)象,通過(guò)對(duì)類的訪問(wèn)控制實(shí)現(xiàn)。
// 工廠類 public class ShapeFactory { // 生產(chǎn)圓形實(shí)例 public static Shape getCircle() { return new Circle(); } // 生產(chǎn)正方形實(shí)例 public static Shape getSquare() { return new Square(); } // 生產(chǎn)三角形實(shí)例 public static Shape getTriangle() { return new Triangle(); } } // 形狀基類 public abstract class Shape { // 繪制圖形方法 public abstract void draw(); } // 圓形類 public class Circle extends Shape { @Override public void draw() { System.out.println("draw a circle"); } } // 正方形類 public class Square extends Shape { @Override public void draw() { System.out.println("draw a square"); } } // 三角形類 public class Triangle extends Shape { @Override public void draw() { System.out.println("draw a triangle"); } }
在上述代碼中,我們定義了一個(gè)形狀工廠類ShapeFactory,其中定義了三個(gè)方法,用于生產(chǎn)圓形、正方形和三角形對(duì)象。由于我們可以通過(guò)工廠類直接獲取對(duì)象,因此并不需要在代碼中顯式地創(chuàng)建對(duì)象。
為了更好地管理對(duì)象,我們還可以將工廠類和單例模式結(jié)合。下面我們來(lái)看一下如何實(shí)現(xiàn):
// 原始的工廠類 public class ShapeFactory { // 生產(chǎn)圓形實(shí)例 public static Shape getCircle() { return new Circle(); } // ... } // 單例形狀工廠類 public class SingletonShapeFactory { // 保存單例對(duì)象 private static SingletonShapeFactory instance; // 私有化構(gòu)造方法 private SingletonShapeFactory() {} // 獲取單例對(duì)象 public static SingletonShapeFactory getInstance() { if (instance == null) { instance = new SingletonShapeFactory(); } return instance; } // 生產(chǎn)圓形實(shí)例 public Shape getCircle() { return new Circle(); } // ... }
在上面的代碼中,我們定義了一個(gè)SingletonShapeFactory類作為單例的形狀工廠類。通過(guò)私有化構(gòu)造方法和獲取單例實(shí)例方法,保證了該類只有一個(gè)實(shí)例對(duì)象。此外,我們還將原始的靜態(tài)方法改為實(shí)例方法,從而使得我們只需獲取SingletonShapeFactory實(shí)例就可以很方便地使用各種生產(chǎn)對(duì)象的方法。
通過(guò)工廠模式和單例模式的結(jié)合使用,我們可以更好地管理和調(diào)用對(duì)象,提高代碼的效率和可讀性。