设计模式之抽象工厂模式

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

一、认识抽象工厂模式


工厂模式主要分为三个:


(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");
    }
}

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


三、总结


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

相关文章
|
7月前
|
设计模式 PHP
php设计模式--抽象工厂模式(二)
php设计模式--抽象工厂模式(二)
37 0
|
6月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
33 5
|
7月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
7月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
65 2
|
3月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
7月前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
233 4
|
4月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
43 1
|
4月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
4月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)
|
4月前
|
设计模式 存储 XML
[设计模式]创建型模式-抽象工厂模式
[设计模式]创建型模式-抽象工厂模式