设计模式-抽象工厂模式-今日热搜
2023-05-04 14:23:00 腾讯云


【资料图】

抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或依赖对象的方式,而无需指定它们具体的类。这种模式利用工厂接口和抽象类来实现。

在抽象工厂模式中,我们定义一个抽象工厂接口,该接口声明了一些方法用于创建不同类型的对象。然后我们实现该接口的具体工厂类,每个工厂类都能够创建一组相关对象,但这些对象的具体类型是未知的。最后,我们使用这些工厂类创建具体的对象,并将其用于实现我们的应用程序。

优点

抽象工厂模式分离了具体类的创建和使用,使得客户端代码不需要知道具体类的名称。由于抽象工厂模式使用了工厂接口和抽象类,因此它可以轻松地替换具体工厂类和具体产品类。抽象工厂模式使得系统更加灵活,能够适应不同的需求。

缺点

如果需要添加新的产品类,那么需要修改抽象工厂接口及其所有的实现类。在添加新产品族时,需要添加新的工厂类,这可能会导致类的数量增加。

适用场景

一个系统需要独立于它所创建的对象的方式来创建一系列相关或依赖对象时。一个系统需要一组相关对象,但是它不关心这些对象的类是什么时。一个系统需要由多个产品族中的一个来配置时。当你想要提供一组相关产品的接口,而不是仅仅是一组相关产品的实现时。

Java代码示例

下面是一个简单的Java代码示例,它演示了如何使用抽象工厂模式来创建一组相关的对象。:

// 实现产品2的具体类1class ConcreteProduct2_1 implements Product2 {    public void doSomething() {        System.out.println("ConcreteProduct2_1 doSomething");    }}// 实现产品1的具体类2class ConcreteProduct1_2 implements Product1 {    public void doSomething() {        System.out.println("ConcreteProduct1_2 doSomething");    }}// 实现产品2的具体类2class ConcreteProduct2_2 implements Product2 {    public void doSomething() {        System.out.println("ConcreteProduct2_2 doSomething");    }}// 客户端代码public class Client {    public static void main(String[] args) {        // 创建具体工厂类1        AbstractFactory factory1 = new ConcreteFactory1();        // 使用工厂类1创建产品1        Product1 product1_1 = factory1.createProduct1();        product1_1.doSomething();        // 使用工厂类1创建产品2        Product2 product2_1 = factory1.createProduct2();        product2_1.doSomething();        // 创建具体工厂类2        AbstractFactory factory2 = new ConcreteFactory2();        // 使用工厂类2创建产品1        Product1 product1_2 = factory2.createProduct1();        product1_2.doSomething();        // 使用工厂类2创建产品2        Product2 product2_2 = factory2.createProduct2();        product2_2.doSomething();    }}

这个例子中,我们定义了一个抽象工厂接口AbstractFactory,其中包含了创建Product1和Product2两个产品的方法。然后我们实现了两个具体的工厂类ConcreteFactory1和ConcreteFactory2,分别用于创建不同的产品族。每个工厂类都能够创建一组相关的产品,但是它们所创建的具体产品类型是未知的。

我们还定义了两个抽象产品类Product1和Product2,这两个类都包含了一个doSomething()方法,表示这些产品能够完成一些具体的工作。然后我们实现了四个具体的产品类ConcreteProduct1_1、ConcreteProduct2_1、ConcreteProduct1_2和ConcreteProduct2_2,分别用于创建不同的产品。

最后,在客户端代码中,我们创建了具体的工厂类对象,并使用这些工厂类对象来创建具体的产品对象。这样,客户端代码就可以通过工厂类来创建所需的产品,而无需关心这些产品的具体类型。

热门推荐

文章排行

  1. 2023-05-04设计模式-抽象工厂模式-今日热搜
  2. 2023-05-04环球时讯:闻泰科技(600745.SH):公司已有新能源汽车客户的车型单车使用安世的产品数量已接近800颗
  3. 2023-05-042023年阿坝最低社保缴费标准 2023年阿坝社保缴费比例是多少 要闻速递
  4. 2023-05-04东风风神E70“光芒计划”好司机人气王评选活动开启
  5. 2023-05-04武威:非遗绽放光彩
  6. 2023-05-04南京市代表队获得第三届全国文化市场综合执法岗位练兵技能竞赛团体全能一等奖
  7. 2023-05-04浓眉攻防一体-世界今头条
  8. 2023-05-04吉林化纤(000420):1.2万吨碳纤维复材项目前端碳化线已达产
  9. 2023-05-04全球热头条丨上市关键年,顺德银行净利再度下滑,新增不良超25亿|IPO观察
  10. 2023-05-04去腋毛对腋臭有缓解吗女_去腋毛对腋臭有缓解吗 前沿热点
  11. 2023-05-04谷歌 DeepMind 首席执行官:未来几年人工智能可能拥有「人类水平」的智能 全球新动态
  12. 2023-05-04妈妈生病姐弟3天卖上千根冰棍 基本信息讲解
  13. 2023-05-04南京航空航天大学机电学院研究生院_南京航空航天大学机电学院 天天微头条
  14. 2023-05-04露营热度再提升 商家两极分化 行业加速洗牌 每日消息
  15. 2023-05-04芒果青的能吃吗(金煌芒果青的能吃吗)|世界观焦点
  16. 2023-05-04詹俊:红军能否将5连胜延续到赛季结束?阿克复出对曼城太及时了
  17. 2023-05-04南京医院招聘护士最新_南京医院招聘护士_每日资讯
  18. 2023-05-04爱由心生,人道同行——定安县红十字会”5.8人道公益日“网上众筹倡议
  19. 2023-05-04ibfs32.dll丢失_iusb3mon dll丢失
  20. 2023-05-03237.53万人次!安阳市五一假期接待旅客量同比增长456.02%