设计模式(二)-工厂方法模式

本文介绍了工厂方法模式,它定义创建对象的接口,让子类决定实例化的类,使类的实例化延迟到子类。该模式弥补了简单工厂违背开放 - 封闭原则的不足,包含抽象产品、具体产品、抽象工厂和具体工厂四部分,还给出代码示例及UML类图,提及在Spring中IOC创建bean的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是工厂方法模式呢?

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
我们已经知道简单工厂模式,在工厂类里做了分支判断,如果要新增功能,就必须修改工厂类增加分支。这种做法违背了开放-封闭原则,因为对修改也变成开放的了。而工厂方法在保留简单工厂优点的基础上弥补了简单工厂的不足。

简单来说工厂方法模式包含四个部分:
抽象产品:产品对象共同的接口或基类
具体产品:某种具体的产品
抽象工厂:所有子类工厂统一的基类或接口
具体工厂:具体生产某种产品的子类工厂

工厂方法模式结构图

工厂方法模式结构图

show code

创建一个电脑接口 :Computer

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public interface Computer {

    void coding();
}


创建一个三个笔记本电脑类 ,实现Computer 接口

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Dell implements Computer {

    @Override
    public void coding() {
        System.out.println("中规中矩!");
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Lenovo implements Computer {

    @Override
    public void coding() {
        System.out.println("键盘用着舒服!");
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Mac implements Computer {

    @Override
    public void coding() {
        System.out.println("装逼神器!");
    }
}

创建一个工厂接口 ComputerFactory

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public interface ComputerFactory {

    Computer creatComputer();
}

创建三个工厂类,实现 ComputerFactory

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class DellFactory implements ComputerFactory {

    @Override
    public Computer creatComputer() {
        return new Dell();
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class LenovoFactory implements ComputerFactory {
    @Override
    public Computer creatComputer() {
        return new Lenovo();
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class MacFactory implements ComputerFactory {

    @Override
    public Computer creatComputer() {
        return new Mac();
    }
}

最后,新建一个Customer 类测试一下

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Customer {

    public static void main(String[] args) {

        ComputerFactory factory = null;

        factory= new LenovoFactory();
        Computer  lenovo  =  factory.creatComputer();
        lenovo.coding();

        factory= new DellFactory();
        Computer  dell  =  factory.creatComputer();
        dell.coding();

        factory= new MacFactory();
        Computer  mac  =  factory.creatComputer();
        mac.coding();

    }
}

输出结果:

键盘用着舒服!
中规中矩!
装逼神器!

UML类图

在这里插入图片描述

工厂方法模式的实际应用

spring中IOC创建bean,FactoryBean
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值