设计模式(2)工厂方法模式

一、

1、介绍:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。工厂方法模式也即将简单工厂模块的Factory工厂类拆成接口,再定义具体的工厂子类去实现。

2、结构图

3、代码

复制代码
/**
 * 虚拟工厂类
 * 给具体的工厂类提供虚拟方法
 */
abstract class AbstractFactory {
    // 表示创建产品的方法,此处使用的是通过具体的产品类的Class来确定需要创建的产品
    // 也可以通过String等其他方式来指定
    public abstract <T extends AbstractProduct> T create(Class<T> tClass);

}
/**
 * 具体工厂类
 * 继承虚拟工厂类,提供真正的创建对象的方法的实现
 */
class CommonFactory extends AbstractFactory{

    @Override // 对虚拟工厂类的方法进行重写
    public <T extends AbstractProduct> T create(Class<T> tClass) {
        T product = null; // 创建一个null对象作为初始化,使catch到异常后也能有null返回作为结果
        try {
            // 明明这样就可以实现,但是书里写的更加复杂
            // (T)Class.forName(tClass.getName()).newInstance()
            // 暂时对此感到不解
            product = tClass.newInstance(); // 通过反射创建新的对象
        } catch (Exception e) {
            e.printStackTrace();
        }
        return product;
    }
}
/**
 * 虚拟产品类
 * 对产品类的属性以及方法做好规范
 * 如果有所有具体产品类都通用的方法也可以直接实现
 */
abstract class AbstractProduct {
    /**
     * 通用方法
     */
    public void method1() {
        System.out.println("所有产品都会这么做");
    }
    /**
     * 每个产品实现各异的方法
     */
    public abstract void method2();
}
/**
 * 具体产品类
 * 继承虚拟产品类,在虚拟产品类提供的默认方法外,具体实现虚拟类中规定的虚拟方法
 */
class Product extends AbstractProduct {
    @Override
    public void method2() {
        System.out.println("这是一个具体的产品类的特性");
    }
}
class Client {
    public static void main(String[] args) {
        AbstractFactory factory = new CommonFactory();
        AbstractProduct product = factory.create(Product.class);
        product.method1();
        product.method2();
    }
} 
相关推荐
进击的前栈19 小时前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞20 小时前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研20 小时前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
workflower21 小时前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研21 小时前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
Kel21 小时前
万物皆 Runnable:LangChain 如何用一个接口统一模型、链与图
人工智能·设计模式·架构
ttod_qzstudio1 天前
【软考设计模式】策略模式:算法族的封装与动态切换精讲
设计模式·策略模式
咖啡八杯1 天前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
ttod_qzstudio1 天前
【软考设计模式】外观模式:复杂子系统的“门面“封装与代码填空精讲
设计模式·外观模式
geovindu2 天前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式