国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java特性之設(shè)計(jì)模式【抽象工廠模式】

這篇具有很好參考價(jià)值的文章主要介紹了Java特性之設(shè)計(jì)模式【抽象工廠模式】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、抽象工廠模式

概述

抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱(chēng)為其他工廠的工廠。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式

在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類(lèi)。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象

抽象工廠模式提供了一種創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的接口,而無(wú)需指定具體實(shí)現(xiàn)類(lèi)。通過(guò)使用抽象工廠模式,可以將客戶端與具體產(chǎn)品的創(chuàng)建過(guò)程解耦,使得客戶端可以通過(guò)工廠接口來(lái)創(chuàng)建一族產(chǎn)品

主要解決:主要解決接口選擇的問(wèn)題

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

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能保證客戶端始終只使用同一個(gè)產(chǎn)品族中的對(duì)象

缺點(diǎn):

產(chǎn)品族擴(kuò)展非常困難,要增加一個(gè)系列的某一產(chǎn)品,既要在抽象的 Creator 里加代碼,又要在具體的里面加代碼

1. 各個(gè)角色介紹

1.1 抽象工廠(Abstract Factory)

聲明了一組用于創(chuàng)建產(chǎn)品對(duì)象的方法,每個(gè)方法對(duì)應(yīng)一種產(chǎn)品類(lèi)型。抽象工廠可以是接口或抽象類(lèi)

1.2 具體工廠(Concrete Factory)

實(shí)現(xiàn)了抽象工廠接口,負(fù)責(zé)創(chuàng)建具體產(chǎn)品對(duì)象的實(shí)例

1.3 抽象產(chǎn)品(Abstract Product)

定義了一組產(chǎn)品對(duì)象的共同接口或抽象類(lèi),描述了產(chǎn)品對(duì)象的公共方法

1.4 具體產(chǎn)品(Concrete Product)

實(shí)現(xiàn)了抽象產(chǎn)品接口,定義了具體產(chǎn)品的特定行為和屬性

2. UML圖

將創(chuàng)建 ShapeColor 接口和實(shí)現(xiàn)這些接口的實(shí)體類(lèi)。下一步是創(chuàng)建抽象工廠類(lèi) AbstractFactory。接著定義工廠類(lèi) ShapeFactoryColorFactory,這兩個(gè)工廠類(lèi)都是擴(kuò)展了 AbstractFactory。然后創(chuàng)建一個(gè)工廠創(chuàng)造器/生成器類(lèi) FactoryProducer

AbstractFactoryPatternDemo 類(lèi)使用 FactoryProducer 來(lái)獲取 AbstractFactory 對(duì)象。它將向 AbstractFactory 傳遞形狀信息 ShapeCIRCLE / RECTANGLE / SQUARE),以便獲取它所需對(duì)象的類(lèi)型。同時(shí)它還向 AbstractFactory 傳遞顏色信息 ColorRED / GREEN / BLUE),以便獲取它所需對(duì)象的類(lèi)型

Java特性之設(shè)計(jì)模式【抽象工廠模式】,Java特性,java,設(shè)計(jì)模式,抽象工廠模式

3. 具體例子和代碼

角色分配

  • Shape:形狀接口

    • Circle:圓形(實(shí)現(xiàn)形狀接口)
    • Rectangle:三角形(實(shí)現(xiàn)形狀接口)
    • Square:正方形(實(shí)現(xiàn)形狀接口)
  • Color:形狀接口

    • Red:圓形(實(shí)現(xiàn)形狀接口)
    • Green:三角形(實(shí)現(xiàn)形狀接口)
    • Blue:正方形(實(shí)現(xiàn)形狀接口)
  • AbstractFactory:抽象工廠

    • ColorFactory:顏色工廠
    • ShapeFactory:形狀工廠
  • FactoryProducer:工廠生產(chǎn)者

3.1 形狀接口以及實(shí)現(xiàn)類(lèi)

  • Shape
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 形狀接口
 */
public interface Shape {

    /**
     * 繪圖
     */
    void draw();

}
  • Circle
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 實(shí)現(xiàn)形狀接口-圓形
 */
public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }

}
  • Rectangle
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 實(shí)現(xiàn)形狀接口-長(zhǎng)方形
 */
public class Rectangle implements Shape {

    @Override
    public void draw() {
        System.out.println("Inside Rectangle::draw() method.");
    }

}
  • Square
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 實(shí)現(xiàn)形狀接口-正方形
 */
public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }

}

3.2 顏色接口以及實(shí)現(xiàn)類(lèi)

  • Color
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 顏色接口
 */
public interface Color {

    /**
     * 顏色填充
     */
    void fill();

}
  • Red
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 繼承顏色接口-紅色
 */
public class Red implements Color {

   @Override
   public void fill() {
      System.out.println("Inside Red::fill() method.");
   }

}
  • Green
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 繼承顏色接口-綠色
 */
public class Green implements Color {

    @Override
    public void fill() {
        System.out.println("Inside Green::fill() method.");
    }

}
  • Blue
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 繼承顏色接口-藍(lán)色
 */
public class Blue implements Color {

   @Override
   public void fill() {
      System.out.println("Inside Blue::fill() method.");
   }

}

3.3 抽象工廠類(lèi)以及實(shí)現(xiàn)類(lèi)

  • AbstractFactory
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 抽象工廠
 */
public abstract class AbstractFactory {

    /**
     * 構(gòu)造顏色實(shí)體
     *
     * @param color 顏色名稱(chēng)
     * @return 顏色實(shí)體
     */
    public abstract Color getColor(String color);

    /**
     * 構(gòu)造形狀實(shí)體
     *
     * @param shape 形狀名稱(chēng)
     * @return 形狀實(shí)體
     */
    public abstract Shape getShape(String shape);

}
  • ColorFactory
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 顏色工廠
 */
public class ColorFactory extends AbstractFactory {

    @Override
    public Shape getShape(String shapeType) {
        return null;
    }

    @Override
    public Color getColor(String color) {
        if (color == null) {
            return null;
        }
        if (color.equalsIgnoreCase("RED")) {
            return new Red();
        } else if (color.equalsIgnoreCase("GREEN")) {
            return new Green();
        } else if (color.equalsIgnoreCase("BLUE")) {
            return new Blue();
        }
        return null;
    }
}
  • ShapeFacotry
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 形狀工廠
 */
public class ShapeFactory extends AbstractFactory {

   @Override
   public Shape getShape(String shapeType) {
      if (shapeType == null) {
         return null;
      }
      // (優(yōu)化:這里可以通過(guò)反射來(lái)獲取)
      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;
   }

   @Override
   public Color getColor(String color) {
      return null;
   }
}

3.4 工廠生產(chǎn)者

  • FactoryProducer
package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 * @description 工廠生產(chǎn)者
 */
public class FactoryProducer {

    /**
     * 根據(jù)選擇獲取對(duì)應(yīng)的生產(chǎn)工廠
     *
     * @param choice 選擇類(lèi)型
     * @return 具體的工廠
     */
    public static AbstractFactory getFactory(String choice) {
        if (choice.equalsIgnoreCase("SHAPE")) {
            return new ShapeFactory();
        } else if (choice.equalsIgnoreCase("COLOR")) {
            return new ColorFactory();
        }
        return null;
    }
}

3.5 測(cè)試主函數(shù)

package com.vinjcent.prototype.abstractFactory;

/**
 * @author vinjcent
 */
public class Main {

    public static void main(String[] args) {

        // 1.獲取形狀工廠
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

        // 2.獲取形狀為 Circle 的對(duì)象
        Shape circle = shapeFactory.getShape("CIRCLE");
        // 2.1 調(diào)用 Circle 的 draw 方法
        circle.draw();

        // 3.獲取形狀為 Rectangle 的對(duì)象
        Shape rectangle = shapeFactory.getShape("RECTANGLE");
        // 3.1 調(diào)用 Rectangle 的 draw 方法
        rectangle.draw();

        // 4.獲取形狀為 Square 的對(duì)象
        Shape square = shapeFactory.getShape("SQUARE");
        // 4.1 調(diào)用 Square 的 draw 方法
        square.draw();

        // 5.獲取顏色工廠
        AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

        // 6.獲取顏色為 Red 的對(duì)象
        Color red = colorFactory.getColor("RED");
        // 6.1 調(diào)用 Red 的 fill 方法
        red.fill();

        // 7.獲取顏色為 Green 的對(duì)象
        Color green = colorFactory.getColor("GREEN");
        // 7.1調(diào)用 Green 的 fill 方法
        green.fill();

        // 8.獲取顏色為 Blue 的對(duì)象
        Color blue = colorFactory.getColor("BLUE");
        // 8.1調(diào)用 Blue 的 fill 方法
        blue.fill();
    }
}

  • 測(cè)試結(jié)果

Java特性之設(shè)計(jì)模式【抽象工廠模式】,Java特性,java,設(shè)計(jì)模式,抽象工廠模式

4. 使用場(chǎng)景

  • QQ 換皮膚,一整套一起換
  • 生成不同操作系統(tǒng)的程序

注意事項(xiàng):

產(chǎn)品族難擴(kuò)展,產(chǎn)品等級(jí)易擴(kuò)展

Java特性之設(shè)計(jì)模式【抽象工廠模式】,Java特性,java,設(shè)計(jì)模式,抽象工廠模式文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-693782.html

到了這里,關(guān)于Java特性之設(shè)計(jì)模式【抽象工廠模式】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【java設(shè)計(jì)模式】創(chuàng)建型模式介紹(工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式)

    簡(jiǎn)介 本文介紹Java設(shè)計(jì)模式中創(chuàng)建型模式的五種 一、工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 工廠模式提供了一種將對(duì)象的實(shí)例化過(guò)程封裝在工廠類(lèi)中的方式。通過(guò)使用工

    2024年02月16日
    瀏覽(24)
  • [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

    [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

    前言: 為什么之前寫(xiě)過(guò)Golang 版的設(shè)計(jì)模式,還在重新寫(xiě) Java 版? 答:因?yàn)閷?duì)于我而言,當(dāng)然也希望對(duì)正在學(xué)習(xí)的大伙有幫助。Java作為一門(mén)純面向?qū)ο蟮恼Z(yǔ)言,更適合用于學(xué)習(xí)設(shè)計(jì)模式。 為什么類(lèi)圖要附上uml 因?yàn)楹芏嗳藢W(xué)習(xí)有做筆記的習(xí)慣,如果單純的只是放一張圖片,那

    2024年01月22日
    瀏覽(23)
  • 設(shè)計(jì)模式、Java8新特性實(shí)戰(zhàn) - List<T> 抽象統(tǒng)計(jì)組件

    設(shè)計(jì)模式、Java8新特性實(shí)戰(zhàn) - List<T> 抽象統(tǒng)計(jì)組件

    在日常寫(xiě)代碼的過(guò)程中,針對(duì)List集合,統(tǒng)計(jì)里面的某個(gè)屬性,是經(jīng)常的事情,針對(duì)List的某個(gè)屬性的統(tǒng)計(jì),我們目前大部分時(shí)候的代碼都是這樣寫(xiě),每統(tǒng)計(jì)一個(gè)變量,就要定義一個(gè)值,且要在for循環(huán)增加一行累計(jì)的代碼,比較繁瑣,而且代碼寫(xiě)出來(lái)不夠優(yōu)雅。 利用頂層抽象的

    2024年02月14日
    瀏覽(28)
  • 【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類(lèi)和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類(lèi)和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    掌握 抽象類(lèi)和接口的定義、使用、區(qū)別、常見(jiàn)設(shè)計(jì)模式; 抽象類(lèi)是代碼開(kāi)發(fā)中的重要組成部分,利用抽象類(lèi)可以明確地定義子類(lèi)需要覆寫(xiě)的方法,這樣相當(dāng)于在語(yǔ)法程度上對(duì)子類(lèi)進(jìn)行了嚴(yán)格的定義限制,代碼的開(kāi)發(fā)也就更加標(biāo)準(zhǔn)。下面具體介紹抽象類(lèi)的概念。 普通類(lèi)可以直

    2024年02月16日
    瀏覽(25)
  • 自學(xué)設(shè)計(jì)模式(簡(jiǎn)單工廠模式、工廠模式、抽象工廠模式)

    使用工廠模式來(lái)生產(chǎn)某類(lèi)對(duì)象(代碼簡(jiǎn)化且容易維護(hù),類(lèi)之間有血緣關(guān)系,可以通過(guò)工廠類(lèi)進(jìn)行生產(chǎn)); 簡(jiǎn)單工廠模式(用于創(chuàng)建簡(jiǎn)單對(duì)象) 對(duì)于簡(jiǎn)單工廠模式,需要的工廠類(lèi)只有一個(gè); 在工廠類(lèi)中的公共成員函數(shù)來(lái)創(chuàng)建所需對(duì)象; 工廠模式 簡(jiǎn)單工廠模式會(huì)違反開(kāi)放封閉

    2024年02月11日
    瀏覽(27)
  • 【設(shè)計(jì)模式】單例模式、工廠方法模式、抽象工廠模式

    1. 單例模式 (Singleton Pattern): 場(chǎng)景: 在一個(gè)應(yīng)用程序中,需要一個(gè)全局唯一的配置管理器,確保配置信息只有一個(gè)實(shí)例。 2. 工廠方法模式 (Factory Method Pattern): 場(chǎng)景: 創(chuàng)建一組具有相似功能但具體實(shí)現(xiàn)不同的日志記錄器。 3. 抽象工廠模式 (Abstract Factory Pattern): 場(chǎng)景: 創(chuàng)建不同

    2024年01月15日
    瀏覽(29)
  • 設(shè)計(jì)模式-抽象工廠模式

    抽象工廠模式:該模式是對(duì)工廠模式的拓展,因?yàn)楣S模式中創(chuàng)建的產(chǎn)品都需要繼承自同一個(gè)父類(lèi)或接口,創(chuàng)建的產(chǎn)品類(lèi)型相同,無(wú)法創(chuàng)建其他類(lèi)型產(chǎn)品,所以抽象工廠模式對(duì)其進(jìn)行拓展,使其可以創(chuàng)建其他類(lèi)型的產(chǎn)品。 手機(jī)產(chǎn)品 Pad產(chǎn)品 工廠 優(yōu)點(diǎn):創(chuàng)建的產(chǎn)品種類(lèi)不單一

    2024年02月13日
    瀏覽(22)
  • 設(shè)計(jì)模式 - 抽象工廠模式

    設(shè)計(jì)模式 - 抽象工廠模式

    學(xué)完工廠模式,才發(fā)現(xiàn)還有一個(gè)抽象工廠模式;學(xué)習(xí)后發(fā)現(xiàn)不論是通過(guò)接口方式、還是繼承方式,都可以使用抽象工廠模式;但是個(gè)人建議更多的時(shí)候,我們可以優(yōu)先考慮接口方式,畢竟 單繼承,多實(shí)現(xiàn) 設(shè)計(jì)模式分為三種類(lèi)型,共23種 創(chuàng)建型模式:?jiǎn)卫J?、工廠模式、抽

    2024年02月13日
    瀏覽(26)
  • 【設(shè)計(jì)模式】抽象工廠模式

    【設(shè)計(jì)模式】抽象工廠模式

    抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱(chēng)為其他工廠的工廠。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類(lèi)。每個(gè)

    2024年02月13日
    瀏覽(28)
  • 設(shè)計(jì)模式(三):抽象工廠模式

    設(shè)計(jì)模式(三):抽象工廠模式

    抽象工廠模式 (Abstract Factory Pattern)屬于創(chuàng)建型模式,是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱(chēng)為其他工廠的工廠。 在 抽象工廠模式 中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類(lèi)。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象。 通過(guò)使用 抽

    2024年04月25日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包