日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

设计模式(一):工厂方法

發(fā)布時(shí)間:2023/12/3 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式(一):工厂方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

    • 概括
    • 目的
    • 主要解決
    • 何時(shí)使用
    • 使用場(chǎng)景
    • 總結(jié)
    • 三種工廠模式的對(duì)比
    • 代碼示例

概括

定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。使用特殊的工廠方法代替對(duì)于對(duì)象構(gòu)造函數(shù)的直接調(diào)用(即使用 new運(yùn)算符,工廠方法 使一個(gè)類的實(shí)例化延遲到其子類。)

目的

工廠方法的目的是使得創(chuàng)建對(duì)象和使用對(duì)象是分離的,并且客戶端總是引用抽象工廠和抽象產(chǎn)品。

主要解決

主要解決接口選擇的問題。

何時(shí)使用

我們明確地計(jì)劃不同條件下創(chuàng)建不同實(shí)例時(shí)。

使用場(chǎng)景

作為一種創(chuàng)建類模式,在任何需要生成復(fù)雜對(duì)象的地方,都可以使用工廠方法模式。有一點(diǎn)需要注意的地方就是復(fù)雜對(duì)象適合使用工廠模式,而簡(jiǎn)單對(duì)象,特別是只需要通過 new 就可以完成創(chuàng)建的對(duì)象,無需使用工廠模式。

總結(jié)

工廠方法,將多個(gè)具有相同功能(具體實(shí)現(xiàn)不相同)的不同類抽象為一個(gè)抽象類,并提供一個(gè)工廠方法代替對(duì)于對(duì)象構(gòu)造函數(shù)的直接調(diào)用(只返回抽象類)。客戶端通過工廠方法的參數(shù)指定具體的類型,將返回的具體類當(dāng)抽象類使用(無需關(guān)心具體類的實(shí)現(xiàn)方式)。

工廠方法可以隱藏創(chuàng)建產(chǎn)品的細(xì)節(jié),且不一定每次都會(huì)真正創(chuàng)建產(chǎn)品,完全可以返回緩存的產(chǎn)品,從而提升速度并減少內(nèi)存消耗。

三種工廠模式的對(duì)比

三種工廠模式都封裝了對(duì)象創(chuàng)建的過程,調(diào)用方通過抽象工廠獲取抽象產(chǎn)品,調(diào)用方只使用抽象產(chǎn)品。

簡(jiǎn)單工廠:所有產(chǎn)品都由一個(gè)工廠創(chuàng)建,根據(jù)參數(shù)創(chuàng)建不同產(chǎn)品,因此每次添加新產(chǎn)品,都需要修改工廠的方法。

工廠方法:每個(gè)產(chǎn)品都有相應(yīng)的工廠實(shí)現(xiàn)了,由調(diào)用方?jīng)Q定使用實(shí)例化哪個(gè)工廠。工廠方法的工廠用來創(chuàng)建一種產(chǎn)品(如:鼠標(biāo)工廠創(chuàng)建鼠標(biāo)、鍵盤工廠鍵盤)。

抽象工廠:工廠方法的增強(qiáng),每個(gè)工廠可以創(chuàng)建一系列相關(guān)的產(chǎn)品(如小米工廠可以創(chuàng)建小米鼠標(biāo)、小米鍵盤; 華為工廠可以創(chuàng)建華為鼠標(biāo),華為鍵盤)。可以認(rèn)為抽象工廠是對(duì)工廠方法的組合

代碼示例

  • 步驟一
    創(chuàng)建一個(gè)接口
public interface Shape {void draw();}
  • 步驟二
    創(chuàng)建實(shí)現(xiàn)接口的實(shí)體類
public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Inside Rectangle::draw() method.");}}public class Square implements Shape {@Overridepublic void draw() {System.out.println("Inside Square::draw() method.");}}javapublic class Circle implements Shape {@Overridepublic void draw() {System.out.println("Inside Circle::draw() method.");}}
  • 步驟三
    創(chuàng)建一個(gè)工廠,生成基于給定信息的實(shí)體類的對(duì)象。
public class ShapeFactory {//使用 getShape 方法獲取形狀類型的對(duì)象public Shape getShape(String shapeType){if(shapeType == null){return null;} if(shapeType.equalsIgnoreCase("CIRCLE")){return new Circle();} else if(shapeType.equalsIgnoreCase("RECTANGLE")){return new Rectangle();} else if(shapeType.equalsIgnoreCase("SQUARE")){return new Square();}return null;}}
  • 步驟四
    使用該工廠,通過傳遞類型信息來獲取實(shí)體類的對(duì)象。
public class FactoryPatternDemo {public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();//獲取 Circle 的對(duì)象,并調(diào)用它的 draw 方法Shape shape1 = shapeFactory.getShape("CIRCLE");//調(diào)用 Circle 的 draw 方法shape1.draw();//獲取 Rectangle 的對(duì)象,并調(diào)用它的 draw 方法Shape shape2 = shapeFactory.getShape("RECTANGLE");//調(diào)用 Rectangle 的 draw 方法shape2.draw();//獲取 Square 的對(duì)象,并調(diào)用它的 draw 方法Shape shape3 = shapeFactory.getShape("SQUARE");//調(diào)用 Square 的 draw 方法shape3.draw();}}
  • 步驟五
    執(zhí)行程序,輸出結(jié)果:
    Inside Circle::draw() method.
    Inside Rectangle::draw() method.
    Inside Square::draw() method.

總結(jié)

以上是生活随笔為你收集整理的设计模式(一):工厂方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。