簡單工廠模式、工廠方法模式和抽象工廠模式是面向?qū)ο笤O(shè)計中用來實現(xiàn)對象創(chuàng)建靈活性的三種不同形式的工廠模式。它們各自有其特點、適用場景及優(yōu)缺點。以下是它們之間的區(qū)別以及對應(yīng)的適用場景,以及示例說明:
簡單工廠模式
定義:
簡單工廠模式提供一個靜態(tài)方法或非靜態(tài)方法,通過接收參數(shù)來決定創(chuàng)建并返回何種具體產(chǎn)品對象。這個方法通常存在于一個單獨的“工廠”類中,負責處理對象的創(chuàng)建細節(jié)。
特點:
- 集中控制對象的創(chuàng)建過程。
- 適用于創(chuàng)建邏輯相對簡單、產(chǎn)品種類數(shù)量有限且易于擴展的情況。
適用場景:
- 創(chuàng)建對象的邏輯可能經(jīng)常變化或者需要在運行時動態(tài)決定創(chuàng)建哪種對象。
- 產(chǎn)品之間存在一定的關(guān)聯(lián)或繼承關(guān)系,由同一個工廠進行管理。
示例:
假設(shè)有一個圖形繪制應(yīng)用程序,需要創(chuàng)建不同類型的圖形(如圓形、矩形、三角形)??梢远x一個ShapeFactory
來根據(jù)傳入的類型字符串生成相應(yīng)的Shape
對象:
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
}
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a triangle");
}
}
public class ShapeFactory {
public static Shape createShape(String shapeType) {
if ("circle".equals(shapeType)) {
return new Circle();
} else if ("rectangle".equals(shapeType)) {
return new Rectangle();
} else if ("triangle".equals(shapeType)) {
return new Triangle();
} else {
throw new IllegalArgumentException("Invalid shape type");
}
}
}
// 使用
Shape circle = ShapeFactory.createShape("circle");
circle.draw();
工廠方法模式
定義:
工廠方法模式定義了一個創(chuàng)建對象的接口,但讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。每個子類對應(yīng)一種具體的產(chǎn)品,負責創(chuàng)建該產(chǎn)品的實例。
特點:
- 將具體產(chǎn)品的創(chuàng)建延遲到子類中完成,符合“開閉原則”,即對擴展開放,對修改關(guān)閉。
- 適用于產(chǎn)品族內(nèi)的產(chǎn)品差異較大或產(chǎn)品種類繁多,且需要保持高度解耦。
適用場景:
- 當一個類不知道它所必須創(chuàng)建的對象的類時。
- 當一個類希望由它的子類來指定它所創(chuàng)建的對象的時候。
- 當類將創(chuàng)建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。
示例:
繼續(xù)上述圖形繪制應(yīng)用程序的例子,如果產(chǎn)品種類增加且差異較大,可以采用工廠方法模式。首先定義一個抽象工廠接口和各種圖形工廠子類:
public interface ShapeFactory {
Shape createShape();
}
public class CircleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
public class RectangleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Rectangle();
}
}
public class TriangleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Triangle();
}
}
// 使用
ShapeFactory circleFactory = new CircleFactory();
Shape circle = circleFactory.createShape();
circle.draw();
抽象工廠模式
定義:
抽象工廠模式提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。客戶端使用抽象工廠來創(chuàng)建對象族,而不直接使用具體產(chǎn)品類。
特點:
- 用于創(chuàng)建一族相關(guān)或相互依賴的對象(產(chǎn)品族),而不僅僅是一個產(chǎn)品對象。
- 提供一個高層接口,隱藏產(chǎn)品的具體實現(xiàn)系列,使得客戶使用起來更加方便。
適用場景:
- 當一個系統(tǒng)不希望依賴于產(chǎn)品類實例如何被創(chuàng)建、組合和表達的細節(jié)時。
- 當一個系統(tǒng)需要獨立于它的產(chǎn)品的創(chuàng)建、組合和表示時。
- 當一個系統(tǒng)的產(chǎn)品有多于一個的產(chǎn)品族,而系統(tǒng)只消費其中某一族的產(chǎn)品時。
示例:
假設(shè)圖形應(yīng)用程序除了形狀之外,還引入了顏色概念,每種形狀可以有不同的顏色(如紅色圓形、藍色圓形)。這時可以定義兩個產(chǎn)品族:形狀(Circle、Rectangle、Triangle)和顏色(Red、Blue)。抽象工廠模式可以創(chuàng)建這兩類產(chǎn)品:文章來源:http://www.zghlxwxcb.cn/news/detail-858156.html
public interface Shape {
void draw();
}
public class RedCircle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a red circle");
}
}
public class BlueCircle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a blue circle");
}
// 其他形狀和顏色的實現(xiàn)...
}
public interface ColorFactory {
Color getColor();
}
public interface ShapeFactory {
Shape getShape();
}
public class RedShapeFactory implements ColorFactory, ShapeFactory {
@Override
public Color getColor() {
return new RedColor();
}
@Override
public Shape getShape() {
return new RedCircle();
}
}
public class BlueShapeFactory implements ColorFactory, ShapeFactory {
// 實現(xiàn)相應(yīng)顏色和形狀的創(chuàng)建...
}
// 使用
ShapeFactory redFactory = new RedShapeFactory();
Shape redCircle = redFactory.getShape();
redCircle.draw();
總結(jié)來說,簡單工廠模式適用于創(chuàng)建對象邏輯較簡單且種類有限的情況;工廠方法模式適用于產(chǎn)品族內(nèi)產(chǎn)品差異較大且需要保持高度解耦的場景;抽象工廠模式則適用于需要創(chuàng)建一族相關(guān)或相互依賴的對象(產(chǎn)品族)的情況。選擇使用哪種模式取決于實際項目的需求和復(fù)雜度。文章來源地址http://www.zghlxwxcb.cn/news/detail-858156.html
到了這里,關(guān)于Java基礎(chǔ):簡單工廠模式、工廠方法模式和抽象工廠模式綜合概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!