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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

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

目錄

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

概括

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

目的

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

主要解決

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

何時使用

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

使用場景

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

總結(jié)

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

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

三種工廠模式的對比

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

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

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

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

代碼示例

  • 步驟一
    創(chuàng)建一個接口
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)建一個工廠,生成基于給定信息的實(shí)體類的對象。
public class ShapeFactory {//使用 getShape 方法獲取形狀類型的對象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í)體類的對象。
public class FactoryPatternDemo {public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();//獲取 Circle 的對象,并調(diào)用它的 draw 方法Shape shape1 = shapeFactory.getShape("CIRCLE");//調(diào)用 Circle 的 draw 方法shape1.draw();//獲取 Rectangle 的對象,并調(diào)用它的 draw 方法Shape shape2 = shapeFactory.getShape("RECTANGLE");//調(diào)用 Rectangle 的 draw 方法shape2.draw();//獲取 Square 的對象,并調(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é)

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

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