成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

Acceml / 1838人閱讀

摘要:所謂的產(chǎn)品族,一般或多或少的都存在一定的關(guān)聯(lián),抽象工廠模式就可以在類內(nèi)部對(duì)產(chǎn)品族的關(guān)聯(lián)關(guān)系進(jìn)行定義和描述,而不必專門引入一個(gè)新的類來進(jìn)行管理。

0x01.定義與類型

定義:抽象工廠模式提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口

無需指定它們具體的類

類型:創(chuàng)建型

UML

基本java實(shí)現(xiàn)

/**
 * 工廠接口
 */
public interface IFactory {
    AProduct1 createProduct1();
    AProduct2 createProduct2();
}

/**
 * 產(chǎn)品1
 */
public abstract class AProduct1 {
    public abstract void produce();
}

/**
 * 產(chǎn)品2
 */
public abstract class AProduct2 {
    public abstract void produce();
}

/**
 * 工廠實(shí)現(xiàn)
 */
public class FactoryImpl implements IFactory {
    @Override
    public ProductImpl1 createProduct1() {
        return new ProductImpl1();
    }
    @Override
    public ProductImpl2 createProduct2() {
        return new ProductImpl2();
    }
}

/**
 * 產(chǎn)品1實(shí)現(xiàn)
 */
public class ProductImpl1 extends AProduct1 {
    @Override
    public void produce() {
        System.out.println("產(chǎn)品1");
    }
}

/**
 * 產(chǎn)品2實(shí)現(xiàn)
 */
public class ProductImpl2 extends AProduct2 {
    @Override
    public void produce() {
        System.out.println("產(chǎn)品2");
    }
}

/**
 * 測(cè)試與應(yīng)用
 */
public class Test {
    public static void main(String[] args) {
        FactoryImpl factory = new FactoryImpl();
        ProductImpl1 productImpl1 = factory.createProduct1();
        ProductImpl2 productImpl2 = factory.createProduct2();
        productImpl1.produce();
        productImpl2.produce();
    }
}

輸出結(jié)果

產(chǎn)品1
產(chǎn)品2

抽象工廠中的元素

工廠接口:在抽象工廠模式中,工廠接口定義了同一類型的工廠可以生產(chǎn)多種不同的產(chǎn)品,定義了產(chǎn)品的種類。當(dāng)工廠生成的種類發(fā)生變化時(shí),要調(diào)整接口中的方法,這里違反了開閉原則,但是擴(kuò)展不同類型的工廠,只需要實(shí)現(xiàn)接口就可以了。

工廠實(shí)現(xiàn)類:定義了具體的工廠以及具體生成的類型,有多少中類型的工廠,就有多少個(gè)具體的實(shí)現(xiàn)類。

具體產(chǎn)品的抽象類:一個(gè)工廠有可能生產(chǎn)出不同的產(chǎn)品,抽象類定義工廠生產(chǎn)產(chǎn)品的種類,抽象工廠接口中有多少個(gè)方法,就有多少個(gè)抽象類。

具體產(chǎn)品的實(shí)現(xiàn):最后得到的具體產(chǎn)品,決定了產(chǎn)品在客戶端中的具體行為。

0x02.適用場(chǎng)景

客戶端(應(yīng)用層)不依賴于產(chǎn)品類實(shí)例如何被創(chuàng)建,實(shí)現(xiàn)等細(xì)節(jié)

強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對(duì)象(屬于同一產(chǎn)品族)一起使用創(chuàng)建對(duì)象需要大量重復(fù)的代碼

提供一個(gè)產(chǎn)品類的庫,所有的產(chǎn)品以同樣的接口出現(xiàn),從而使客戶端不依賴于具體實(shí)現(xiàn)

0x03.優(yōu)點(diǎn)

具體產(chǎn)品在應(yīng)用層代碼隔離,無需關(guān)心創(chuàng)建細(xì)節(jié)

將一個(gè)系列的產(chǎn)品族統(tǒng)一到一起創(chuàng)建

在類的內(nèi)部對(duì)產(chǎn)品族進(jìn)行約束。所謂的產(chǎn)品族,一般或多或少的都存在一定的關(guān)聯(lián),抽象工廠模式就可以在類內(nèi)部對(duì)產(chǎn)品族的關(guān)聯(lián)關(guān)系進(jìn)行定義和描述,而不必專門引入一個(gè)新的類來進(jìn)行管理。

0x04.缺點(diǎn)

規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合,產(chǎn)品族中擴(kuò)展新的產(chǎn)品困難,需要修改抽象工廠的接口

增加了系統(tǒng)的抽象性和理解難度

0x05.產(chǎn)品等級(jí)結(jié)構(gòu)與產(chǎn)品族介紹


以家用電器為例:

美的:空調(diào),熱水器,冰箱,洗衣機(jī)

海爾:空調(diào),熱水器,冰箱,洗衣機(jī)

美的的全部產(chǎn)品屬于一個(gè)產(chǎn)品族

美的的熱水器和海爾的熱水器屬于一個(gè)產(chǎn)品等級(jí)

美的海爾屬于不同的工廠

空調(diào),熱水器,冰箱,洗衣機(jī)屬于同一工廠生產(chǎn)的不同產(chǎn)品

0x06.樣例實(shí)現(xiàn)
簡(jiǎn)介:慕課網(wǎng)的每一門課程都有手記和視頻等,課程又分Java課程,Python課程

課程工廠類

//課程工廠
public interface ICourseFactory {
    Video getVideo();
    Article getArticle();
}

文章/視頻抽象類

//文章抽象類
public abstract class Article {
    public abstract void produce();
}

//視頻抽象類
public abstract class Video {
    public abstract void produce();
}

Java課程的實(shí)現(xiàn)

//Java課程工廠
public class JavaCourseFactory implements ICourseFactory {
    @Override
    public JavaVideo getVideo() {
        return new JavaVideo();
    }

    @Override
    public JavaArticle getArticle() {
        return new JavaArticle();
    }
}

//Java視頻
public class JavaVideo extends Video {

    @Override
    public void produce() {
        System.out.println("錄制JAVA課程視頻");
    }
}

//Java文章
public class JavaArticle extends Article {
    @Override
    public void produce() {
        System.out.println("編寫Java課程手記");
    }
}

Python課程實(shí)現(xiàn)

//Python課程工廠
public class PythonCourseFactory implements ICourseFactory {
    @Override
    public Video getVideo() {
        return new PythonVideo();
    }

    @Override
    public Article getArticle() {
        return new PythonArticle();
    }
}

//Python視頻實(shí)現(xiàn)
public class PythonVideo extends Video {
    @Override
    public void produce() {
        System.out.println("錄制Python視頻");
    }
}

//Python文章
public class PythonArticle extends Article {
    @Override
    public void produce() {
        System.out.println("編寫Python課程手記");
    }
}

測(cè)試與應(yīng)用類

public class Test {
    public static void main(String[] args) {
        //java 產(chǎn)品族
        ICourseFactory courseFactory = new JavaCourseFactory();
        Video video = courseFactory.getVideo();
        Article article = courseFactory.getArticle();
        video.produce();
        article.produce();
    }
}

輸出結(jié)果

錄制JAVA課程視頻
編寫Java課程手記

樣例UML類圖

0x07.源碼中的抽象工廠

java.sql.Connection

Statement

PreparedStatement

java.sql.Statement

executorSet

MyBatis: SqlSessionFactory

0x08.源碼地址

抽象工廠模式: https://github.com/sigmako/design-pattern/tree/master/abstract-factory

0x09.參考

慕課網(wǎng)設(shè)計(jì)模式精講: https://coding.imooc.com/class/270.html

23種設(shè)計(jì)模式(3):抽象工廠模式: https://blog.csdn.net/zhengzhb/article/details/7359385

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/74846.html

相關(guān)文章

  • 一天一個(gè)設(shè)計(jì)模式JS實(shí)現(xiàn)——工廠模式

    摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的...

    Muninn 評(píng)論0 收藏0
  • 優(yōu)才公開課筆記:php設(shè)計(jì)模式 (二)工廠模式

    摘要:但本質(zhì)是,簡(jiǎn)單工廠并未嚴(yán)格遵循設(shè)計(jì)模式的開閉原則,當(dāng)需要增加新產(chǎn)品時(shí)也需要修改工廠代碼。但是工廠方法則嚴(yán)格遵守開閉原則,模式只負(fù)責(zé)抽象工廠接口,具體工廠交給客戶去擴(kuò)展。 最近開展了三次設(shè)計(jì)模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計(jì)模式在PHP中的應(yīng)用,這是第二篇?jiǎng)?chuàng)建型模式之工廠模式。 設(shè)計(jì)模式的一般介紹在第一篇文章講了,這里就不重復(fù)。 工廠模式 實(shí)現(xiàn):定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)...

    aisuhua 評(píng)論0 收藏0
  • 設(shè)計(jì)模式抽象工廠

    摘要:類圖上面的這張圖引用設(shè)計(jì)模式之禪關(guān)于抽象工廠的通用類圖,說實(shí)話,我覺得這張圖很難懂,不容易表述抽象工廠模式也或許是個(gè)人理解能力。 前言 關(guān)于抽象工廠模式,博主初學(xué)的時(shí)候是懵逼的,花了好大力氣才明白它與工廠模式的異同,不得不說理解能力還有待加強(qiáng)(~。~) 什么是抽象工廠模式 為創(chuàng)建一組相關(guān)或相互依賴的對(duì)象提供一個(gè)接口,而且無須指定它們的具體類。 讓我們?cè)倩仡櫹鹿S模式的定義: 定義一個(gè)用...

    VincentFF 評(píng)論0 收藏0
  • 工廠模式(一)抽象工廠模式

    摘要:主要詳解簡(jiǎn)單工廠模式到抽象工廠模式的演變。抽象工廠模式當(dāng)一個(gè)類別的產(chǎn)品還有多個(gè)系列區(qū)分時(shí),為了按系列生產(chǎn)商品,使用抽象工廠區(qū)分。 主要詳解簡(jiǎn)單工廠模式到抽象工廠模式的演變。 簡(jiǎn)單工廠模式 即靜態(tài)工廠模式1.將對(duì)象的創(chuàng)建和使用分開;2.將生產(chǎn)過程集中,便于集中管理;3.當(dāng)需要?jiǎng)?chuàng)建的對(duì)象類有變動(dòng)時(shí),就不用在所有new 的地方修改了,直接修改工廠類即可; /** * 簡(jiǎn)單工廠模式 ---...

    woshicixide 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<