设计模式之抽象工厂模式

简介: 在古代的时候,人们身上穿的衣服其实是人们自己使用织布机织的,随着社会的发展,一直到了现代社会,我们身上穿的衣服基本上都是在工厂里面做好了,直接拿到市面上去卖就好了,对于我们身上的衣服而言,由一开始的手工制作再到今天的工厂生产,这就是工厂模式。

一、认识抽象工厂模式


工厂模式主要分为三个:


(1)简单工厂模式:我们的衣服在工厂里面去建造,这就是简单工厂模式


(2)工厂方法模式:随着社会的发展,用户现在想要一身黑色的衣服、也想要一身红色的衣服。于是乎,我们开始定义一个总厂,下面有很多具体的工厂来生产不同颜色的衣服。


(3)抽象工厂模式:随着客户的要求越来越高,不同颜色衣服还要带各种不同的鞋子去搭配。于是这个工厂又开始生产衣服又要去生产鞋子。


今天我们将继续依照上一篇文章《工厂模式》来探讨一下抽象工厂模式,其实从上面的例子也可以看出,抽象工厂模式其实是工厂模式的升级。下面就来好好看一下抽象工厂模式的实现;


二、抽象工厂模式实现


对于抽象工厂模式,我们还是根据一张图来详细的分析一下

v2-7c778bc80e7fd6bcecba5798f39c17fb_1440w.jpg

从上图我们可以看到,抽象工厂模式一共至少有5个角色:


(1)用户:提需求


(2)工厂接口:定义多个方法,比如可以生产鞋子,可以生产衣服的方法


(3)具体工厂:对工厂接口的实现,我们在里面生产指定的产品,比如红色衣服工厂,不仅可以生产红色衣服,还可以生产红鞋子、黑色鞋子


(4)抽象产品接口:比如这里的衣服还有鞋子


(5)具体产品类:具体的产品类。


如果上面的图你觉得还不足以刻画,那么直接来看代码:


第一步:抽象产品类定义


//首先是衣服产品
public abstract class ClothProduct {
    public ClothProduct() {}
}
//下面是鞋子产品
public abstract class ShoeProduct {
    public ShoeProduct() {};
}


第二步:具体产品类定义


首先是具体的衣服产品:红衣服和黑衣服

//红衣服
public class RedClothProduct extends ClothProduct{
    public RedClothProduct() {
        System.out.println("生产红色衣服");
    }
}
//黑衣服
public class BlackClothProduct extends ClothProduct {
    public BlackClothProduct() {
        System.out.println("生产黑色衣服");
    }
}

然后是具体的鞋子产品:红鞋子和黑鞋子

//红鞋子
public class RedShoeProduct extends ShoeProduct {
    public RedShoeProduct(){  
        System.out.println("制造--红鞋子");  
    } 
}
//黑鞋子
public class BlackShoeProduct extends ShoeProduct {
    public BlackShoeProduct(){  
        System.out.println("制造--黑鞋子");  
    } 
}


第三步:工厂接口定义


public interface AbstractFactory {
    //制造衣服
    public ClothProduct createClothProduct();
    //制造鞋子
    public ShoeProduct createShoeProduct(String shoeType);
}


第四步:具体工厂定义


首先是红色衣服工厂:可以生产红衣服还有各种颜色的鞋子

public class RedClothFactory implements AbstractFactory{
    //生产红鞋子
    @Override
    public ClothProduct createClothProduct() {  
        return new RedClothProduct();
    }
    //根据不同的类型生产不同的鞋子
    @Override
    public ShoeProduct createShoeProduct(String shoeType) {
        switch (shoeType) {
        case "red":
            return new RedShoeProduct();
        case "black":
            return new BlackShoeProduct();
        default:
            break;
        }
        return null;
    }
}

其次是黑色衣服工厂:可以生产黑衣服还有各种颜色的鞋子

public class BlackClothFactory implements AbstractFactory{
    //生产黑鞋子
    @Override
    public ClothProduct createClothProduct() {  
        return new BlackClothProduct();
    }
    //根据不同的类型生产不同的鞋子
    @Override
    public ShoeProduct createShoeProduct(String shoeType) {
        switch (shoeType) {
        case "red":
            return new RedShoeProduct();
        case "black":
            return new BlackShoeProduct();
        default:
            break;
        }
        return null;
    }
}

第五步:用户类

public class User {
    public static void main(String[] args){  
        //生产红衣服系列
        RedClothFactory redfactory=new RedClothFactory();
        redfactory.createClothProduct();
        redfactory.createShoeProduct("red");
        //redfactory.createShoeProduct("black");
        //生产黑衣服系列
        BlackClothFactory blackfactory=new BlackClothFactory();
        blackfactory.createClothProduct();
        blackfactory.createShoeProduct("red");
        //blackfactory.createShoeProduct("black");
    }
}

关于抽象工厂模式与工厂方法模式的区别,这里就不说了,感觉多看几遍例子就能理解。


三、总结


根据前面写的两篇文章,我们可能会发现无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,目的都是为了代码的解耦。在使用时,只需要关心降低耦合度的目的是否达到了。

相关文章
|
2月前
|
设计模式 PHP
php设计模式--抽象工厂模式(二)
php设计模式--抽象工厂模式(二)
18 0
|
7天前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
14 5
|
2月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
2月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
34 2
|
2月前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
132 4
|
5天前
|
设计模式 SQL 关系型数据库
抽象工厂模式-大话设计模式
抽象工厂模式-大话设计模式
10 1
|
22天前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
23 5
|
10天前
|
设计模式 Java 数据库连接
Java设计模式之抽象工厂模式详解
Java设计模式之抽象工厂模式详解
|
23天前
|
设计模式 架构师 NoSQL
设计模式-工厂方法模式和抽象工厂模式
 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。
193 0
|
2月前
|
设计模式 Java
Java 设计模式:工厂模式与抽象工厂模式的解析与应用
【4月更文挑战第27天】设计模式是软件开发中用于解决常见问题的典型解决方案。在 Java 中,工厂模式和抽象工厂模式是创建型模式中非常核心的模式,它们主要用于对象的创建,有助于增加程序的灵活性和扩展性。本博客将详细介绍这两种模式的概念、区别以及如何在实际项目中应用这些模式。
22 1