设计模式(二):工厂模式

设计模式(二):工厂模式

  • [1. 工厂模式的介绍](#1. 工厂模式的介绍)
  • [2. 工厂模式的类图](#2. 工厂模式的类图)
  • [3. 工厂模式的实现](#3. 工厂模式的实现)
    • [3.1 第一步:创建一个抽象产品](#3.1 第一步:创建一个抽象产品)
    • [3.2 第二步:创建具体产品](#3.2 第二步:创建具体产品)
    • [3.3 第三步:创建工厂](#3.3 第三步:创建工厂)
    • [3.4 第四步:使用工厂,传递类型信息获取对象](#3.4 第四步:使用工厂,传递类型信息获取对象)

1. 工厂模式的介绍

工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。

工厂模式中包含三种角色:

  • 抽象产品(Abstract Product):定义了产品的共同接口或抽象类,规定了产品对象的共同方法。
  • 具体产品(Concrete Product):实现了抽象产品接口,定义了具体产品的特定行为和属性。
  • 工厂( Factory):负责实际创建具体产品的对象。

2. 工厂模式的类图

3. 工厂模式的实现

3.1 第一步:创建一个抽象产品

java 复制代码
package blog;

/**
 * 服饰
 */
public interface Cloth {
    void dress();
}

3.2 第二步:创建具体产品

java 复制代码
package blog;

/**
 * 男装
 */
public class ManCloth implements Cloth {
    @Override
    public void dress() {
        System.out.println("男装");
    }
}
java 复制代码
package blog;

/**
 * 女装
 */
public class WomanCloth implements Cloth {
    @Override
    public void dress() {
        System.out.println("女装");
    }
}

3.3 第三步:创建工厂

java 复制代码
package blog;

/**
 * 工厂
 */
public class ClothFactory {
    public static Cloth create(String type) {
        try {
            Class<?> aClass = Class.forName(type);
            return (Cloth) aClass.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            return null;
        }
    }

}

3.4 第四步:使用工厂,传递类型信息获取对象

java 复制代码
package blog;

/**
 * 使用工厂
 */
public class ClothFactoryDemo {
    public static void main(String[] args) {
        // 创建男装
        Cloth manCloth = ClothFactory.create("blog.ManCloth");
        manCloth.dress();
        // 创建女装
        Cloth womanCloth = ClothFactory.create("blog.WomanCloth");
        womanCloth.dress();
    }
}
相关推荐
艾莉丝努力练剑25 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
武子康1 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
_殊途2 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
椰椰椰耶3 小时前
【Spring】拦截器详解
java·后端·spring
没有bug.的程序员4 小时前
JAVA面试宝典 - 《MyBatis 进阶:插件开发与二级缓存》
java·面试·mybatis
倔强青铜34 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
u_topian5 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
没有羊的王K5 小时前
SSM框架学习——day1
java·学习
珊瑚里的鱼5 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
又菜又爱coding5 小时前
安装Keycloak并启动服务(macOS)
java·keycloak