【每天一个java设计模式(二)】 - 抽象工厂模式

简介: 【每天一个java设计模式(二)】 - 抽象工厂模式

工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品。抽象工厂模式是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。

抽象工厂模式是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。

下面给出抽象工厂的实例:

==假设现在有一个工厂可以生产一些产品(手机、电脑、飞机),另一个工厂可以对生产出来的产品上色(红色、绿色、彩虹色)。我们通过抽象工厂的方式来实现具体工厂的创建,以及产品的生产。==

1. 创建一个接口Product

这个接口表示一种产品(手机、电脑、飞机),但具体是什么我们并不知道。
接口中声明一个方法,表示生产一个产品。

//产品接口
public interface Product {
    void product();
}
AI 代码解读

2. 创建Product接口的实现类

三个实现类Phone、Computer、Plane分别表示手机、电脑、飞机这三种产品。

//手机类
public class Phone implements Product {
    @Override
    public void product() {
        System.out.println("生产了一个牛逼的智能手机");
    }
}
AI 代码解读
//电脑类
public class Computer implements Product {
    @Override
    public void product() {
        System.out.println("生产了一台程序员都想要的电脑");
    }
}
AI 代码解读
//飞机类
public class Plane implements Product {
    @Override
    public void product() {
        System.out.println("生产了一架飞机,随时带你起飞");
    }
}
AI 代码解读

3. 创建另一个接口Color

这个接口表示不同的颜色(红色、绿色、彩色),
接口中声明一个方法表示给产品赋予一种颜色。

//颜色接口
public interface Color {
    void coloring();
}
AI 代码解读

4. 创建Color接口的实现类

三个实现类Red、Green、Rainbow分别表示三种不同的颜色(红色、绿色、彩色)。

//红色
public class Red implements Color {
    @Override
    public void coloring() {
        System.out.println("为产品增添了一层中国红");
    }
}
AI 代码解读
//绿色
public class Green implements Color {
    @Override
    public void coloring() {
        System.out.println("为产品赋予大自然之绿");
    }
}
AI 代码解读
//彩虹色
public class Rainbow implements Color {
    @Override
    public void coloring() {
        System.out.println("五彩斑斓,那是彩虹的颜色");
    }
}
AI 代码解读

5. 为 Color 和 Product对象创建抽象工厂AbstractFactory 来获取工厂

可以通过抽象工厂获取具体的产品工厂和颜色工厂

//抽象工厂类
public abstract class AbstractFactory {
    //生产产品的工厂
    public abstract Product createProduct(String productType);

    //为产品上色的工厂
    public abstract Color drawColor(String colorType);
}
AI 代码解读

6. 创建抽象工厂 AbstractFactory 的实现类,基于给定的信息生成实体类的对象。

ProductFactory是生产产品的工厂,用户生产出手机、电脑和飞机。
ColorFactory 是颜色工厂,用来给产品上色。

//生产产品的工厂
public class ProductFactory extends AbstractFactory {
    @Override
    public Product createProduct(String productType) {
        if(productType.equals("手机")){
            return new Phone();
        }else if(productType.equals("电脑")){
            return new Computer();
        }else if(productType.equals("飞机")){
            return new Plane();
        }else {
            System.out.println("传入产品类型有误!");
        }
        return null;
    }

    @Override
    public Color drawColor(String colorType) {
        return null;
    }
}
AI 代码解读
//产品上色的工厂
public class ColorFactory extends AbstractFactory {
    @Override
    public Product createProduct(String productType) {
        return null;
    }

    @Override
    public Color drawColor(String colorType) {
        if(colorType.equals("红色")){
            return new Red();
        }else if(colorType.equals("绿色")){
            return new Green();
        }else if(colorType.equals("彩虹色")){
            return new Rainbow();
        }else {
            System.out.println("传入产品类型有误!");
        }
        return null;
    }
}
AI 代码解读

7. 创建一个工厂创造器/生成器类,来获取具体工厂。

//工厂生成器
public class FactoryProducer {
    public static AbstractFactory getFactory(String type){
        if(type.equals("产品厂")){
            return new ProductFactory();
        } else if(type.equals("颜色厂")){
            return new ColorFactory();
        }
        return null;
    }
}
AI 代码解读

8. 使用 FactoryProducer 来获取 AbstractFactory,通过传递类型信息来获取实体类的对象。

用过抽象工厂创建出两个具体工厂,在通过具体工厂生产出产品和颜色对象。

public class FactoryMain {
    public static void main(String[] args) {
        //获取生产产品的工厂
        AbstractFactory product = FactoryProducer.getFactory("产品厂");
        //获取增加颜色的工厂
        AbstractFactory color = FactoryProducer.getFactory("颜色厂");

        //生产一部手机
        Product phone = product.createProduct("手机");
        phone.product();
        //为手机上色
        Color red = color.drawColor("红色");
        red.coloring();

    }
}
AI 代码解读

便于理解,下面给出几个类的关系图:
在这里插入图片描述

目录
打赏
0
0
0
0
2
分享
相关文章
|
2月前
|
「全网最细 + 实战源码案例」设计模式——抽象工厂模式
抽象工厂模式是一种创建型设计模式,提供接口用于创建一系列相关或依赖的对象,无需指定具体类。它解决了产品族问题,管理和创建一组相关产品。结构上包括抽象工厂、具体工厂、抽象产品和具体产品。适用于创建相关对象、产品族固定但种类变化的场景。优点是分离接口与实现、管理产品族方便且扩展性好;缺点是产品族扩展困难且代码复杂度增加。通过配置文件和反射机制可进一步改进,使系统更灵活易扩展。
72 17
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
62 4
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
100 0
[Java]23种设计模式
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
127 0
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等