前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抽象工厂(创造型设计模式)

抽象工厂(创造型设计模式)

作者头像
一行舟
发布2022-08-25 14:13:06
2430
发布2022-08-25 14:13:06
举报
文章被收录于专栏:一行舟一行舟

设计模式的指导思想是:通过找到不同场景下,需求容易发生变化的地方,把这一部分变化的逻辑封装起来。

创造型设计模式一共有5种:工厂模式、抽象工厂、单例模式、创造者模式、原型模式。

作用

抽象工厂的作用和工厂模式基本一样,把实际子类型的创建逻辑封装在工厂方法中,通过调用工厂方法决定返回具体的子类型;不同点在抽象工厂有多个工厂方法,返回同一类型的不同产品。

通常在创建过程复杂的场景下使用。

实现步骤

  1. 定义多个抽象产品。
  2. 给每一种抽象产品定义不同的实现产品。
  3. 定义包含多个工厂方法的抽象工厂。工厂方法和抽象产品的种类对应。
  4. 定义不同的实际工厂,用来实现抽象工厂。实际工厂中的工厂方法返回具体的产品。

示例:

代码语言:javascript
复制
/**
 * 抽象产品A
 */
export interface AbstractProductA{ 
    methodA(params?: any): any
}
/**
 * 抽象产品B
 */
export interface AbstractProductB{
    methodB(params?: any): any
}
/**
 * 产品A1
 */
export class ProductA1 implements AbstractProductA{
    methodA(params?: any): any{
        return 'ProductA1'
    }
}
/**
 * 产品A2
 */
export class ProductA2 implements AbstractProductA{
    methodA(params?: any): any{
        return 'ProductA2'
    }
}
/**
 * 产品B1
 */
export class ProductB1 implements AbstractProductB{
    methodB(params?: any): any{
        return 'ProductB1'
    }
}
/**
 * 产品B2
 */
export class ProductB2 implements AbstractProductB{
    methodB(params?: any): any{
        return 'ProductB2'
    }
}

/**
 * 抽象工厂,返回的是抽象产品
 */
export interface AbstractFactory{
    createProductA(params: any): AbstractProductA
    createProductB(params: any): AbstractProductB
}

/**
 * 实际工厂1
 */
export class AFactory1 implements AbstractFactory{
    createProductA(params: any): AbstractProductA{
        return new ProductA1
    }
    createProductB(params: any): AbstractProductB{
        return new ProductB1
    }
}
/**
 * 实际工厂2
 */
export class AFactory2 implements AbstractFactory{
    createProductA(params: any): AbstractProductA{
        return new ProductA2
    }
    createProductB(params: any): AbstractProductB{
        return new ProductB2
    }
}

缺点

引入了众多的接口和类。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行舟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作用
  • 实现步骤
  • 缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档