[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式

简介: [设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式

前言:

为什么之前写过Golang 版的设计模式,还在重新写Java 版?

答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。

为什么类图要附上uml

因为很多人学习有做笔记的习惯,如果单纯的只是放一张图片,那么学习者也只能复制一张图片,可复用性较低,附上uml,方便有新理解时,快速出新图。

————————————————

简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。

简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。


690a0118a8cf4dceb96f93dd7433e1a3.png


@startuml


class Factory {
  + {static} factoryMethod(): Product
}
abstract class Product {
  + {abstract} operation(): void
}
class ConcreteProductA extends Product {
  + operation(): void
}
class ConcreteProductB extends Product {
  + operation(): void
}

Factory -up-> ConcreteProductA : creates >
Factory -up-> ConcreteProductB : creates >
@enduml

代码实现

package create;


// 抽象产品角色
abstract class Product {
    abstract void  operation();
}

// 具体产品角色A
class ConcreteProductA extends Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA operation");
    }
}

// 具体产品角色B
class ConcreteProductB extends Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB operation");
    }
}

// 工厂类
class Factory {
    public static Product factoryMethod(String productType) {
        Product product = null;
        if (productType.equals("A")) {
            product = new ConcreteProductA();
        } else if (productType.equals("B")) {
            product = new ConcreteProductB();
        }
        return product;
    }
}

// 客户端代码

public class SimpleFactory {
    public static void main(String[] args) {
        // 创建具体产品A
        Product productA = Factory.factoryMethod("A");
        productA.operation();

        // 创建具体产品B
        Product productB = Factory.factoryMethod("B");
        productB.operation();
    }
}

简单工厂模式总结

简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开,它作为一种最简单的工厂模式在软件开发中得到了较为广泛的应用。

主要优点简单工厂模式的主要优点如下:

(1)工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例。客户端可以免除直接创建产品对象的职责,而仅仅“消费”产品。

简单工厂模式实现了对象创建和使用的分离。

(2)客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。

对于一些复杂的类名,通过简单工厂模式可以在一定程度减少使用者的记忆量。

(3)通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

简单工厂模式的主要缺点如下:

(1)由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响。

(2)使用简单工厂模式势必会增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度。

(3)系统扩展困难。一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

(4)简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。


相关文章
|
2天前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2天前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2天前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2天前
|
设计模式 缓存 算法
Java设计模式-访问者模式(22)
Java设计模式-访问者模式(22)
|
4月前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
Java 设计模式 Spring
设计模式: Java中的工厂设计模式
原文链接 https://github.com/shellhub/blog/issues/22 前言 工厂设计模式(Factory Design Pattern)属于创建模式之一,工厂设计模式在JDK,Spring,Stuts被广泛使用 factory-design-pattern 当一个类或者接口有多个子类,并且基于输入返回特定的子类,此时会使用工厂设计模式。
1423 0
|
3天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
14天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
8天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
5天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。