设计模式-工厂模式

大家好我是苏麟 , 今天聊聊工厂模式

此系列全是帮忙宣传 , 原创放在下面了 .

简单工厂模式

在了解⼯⼚⽅法模式之前,有必要对"简单⼯⼚"模式进⾏⼀定的了解,简单⼯⼚模式是⼀种创建型设计模式,但并 不属于23种设计模式之⼀,更多的是⼀种编程习惯。

简单⼯⼚模式的核⼼思想是将产品的创建过程封装在⼀个⼯⼚类中,把创建对象的流程集中在这个⼯⼚类⾥⾯。 简单⼯⼚模式包括三个主要⻆⾊,⼯⼚类、抽象产品、具体产品。

基本实现

java 复制代码
/**
 * @className: Course
 * @author: SL 苏麟
 **/
public abstract class Course {
    public abstract void getCourse();
}


public  class JavaCourse extends Course{

    @Override
    public void getCourse() {
        System.out.println("JavaCourse");
    }
}

public  class PythonCourse extends Course{

    @Override
    public void getCourse() {
        System.out.println("PythonCourse");
    }
}

public class CourseFactory {

    public void getCourse(String s){
        if ("Java".equalsIgnoreCase(s)){
            new JavaCourse().getCourse();
        }else if ("Python".equalsIgnoreCase(s)){
            new PythonCourse().getCourse();
        }
    }
}

工厂模式

工厂⽅法模式也是⼀种创建型设计模式,简单⼯⼚模式只有⼀个⼯⼚类,负责创建所有产品,如果要添加新的产 品,通常需要修改⼯⼚类的代码。⽽⼯⼚⽅法模式引⼊了抽象⼯⼚和具体⼯⼚的概念,每个具体⼯⼚只负责创建⼀ 个具体产品,添加新的产品只需要添加新的⼯⼚类⽽⽆需修改原来的代码,这样就使得产品的⽣产更加灵活,⽀持 扩展,符合开闭原则。

工厂方法法模式分为以下几个角色:

  • 抽象工厂:⼀个接⼝,包含⼀个抽象的⼯⼚⽅法(⽤于创建产品对象)
  • 具体工厂:实现抽象⼯⼚接⼝,创建具体的产品
  • 抽象产品:定义产品的接⼝
  • 具体产品:实现抽象产品接⼝,是⼯⼚创建的对象

实际上⼯⼚⽅法模式也很好理解,就拿"⼿机Phone"这个产品举例,⼿机是⼀个抽象产品,⼩⽶⼿机、华为 ⼿机、苹果⼿机是具体的产品实现,⽽不同品牌的⼿机在各⾃的⽣产⼚家⽣产

应⽤场景

⼯⼚⽅法模式使得每个⼯⼚类的职责单⼀,每个⼯⼚只负责创建⼀种产品,当创建对象涉及⼀系列复杂的初始化逻 辑,⽽这些逻辑在不同的⼦类中可能有所不同时,可以使⽤⼯⼚⽅法模式将这些初始化逻辑封装在⼦类的⼯⼚中。 在现有的⼯具、库中,⼯⼚⽅法模式也有⼴泛的应⽤,⽐如:

  • Spring 框架中的 Bean ⼯⼚:通过配置⽂件或注解,Spring 可以根据配置信息动态地创建和管理对象。
  • JDBC 中的 Connection ⼯⼚:在 Java 数据库连接中, DriverManager 使⽤⼯⼚⽅法模式来创建数据库连 接。不同的数据库驱动(如 MySQL、PostgreSQL 等)都有对应的⼯⼚来创建连接。

基本实现

java 复制代码
// 抽象产品
interface Shape {
    void draw();
}


//具体产品-圆形
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle");
    }
}

// 具体产品 - 正⽅形
class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Square");
    }
}
// 抽象⼯⼚
interface ShapeFactory {
    Shape createShape();
}

// 具体⼯⼚ - 创建圆形
class CircleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}

// 具体⼯⼚ - 创建正⽅形
class SquareFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Square();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        ShapeFactory circleFactory = new CircleFactory();
        Shape circle = circleFactory.createShape();
        circle.draw(); // 输出:Circle
        ShapeFactory squareFactory = new SquareFactory();
        Shape square = squareFactory.createShape();
        square.draw(); // 输出:Square
    }
}

原创地址 : GitHub - youngyangyang04/kama-DesignPattern: 卡码网-23种设计模式精讲,每种设计模式都配套代码练习题,支持 Java,CPP,Python,Go

​

想要了解更多 : 工厂模式 | 菜鸟教程 (runoob.com)


这期就到这里 , 下期见!

相关推荐
paopaokaka_luck7 分钟前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir8 分钟前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人21 分钟前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
m0_639906941 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
2501_944521591 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
holly就是我2 小时前
AI 编程助手为什么跑偏?用开源 ccglass 看清 Prompt、工具调用和 Token 消耗
人工智能·后端
鸿蒙开发2 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
用户788477316342 小时前
小程序后端三选一:云开发、.NET WebAPI、Node,我按客户现状分了三种答案
后端
aiopencode2 小时前
局域网设备抓包怎么做?用 TraceEagle 抓电视、游戏机和 IoT 流量
后端·ios
智驭未来掌门人2 小时前
CLion 开发 Qt 项目的优势
后端