工厂方法模式

本文介绍了设计模式中的工厂方法模式,包括其定义、实现步骤和适用场景。通过示例代码展示了如何创建抽象工厂和具体产品,以及如何使用工厂方法延迟实例化。工厂方法模式的主要优点在于代码的可扩展性和系统解耦,但可能不适合变化频繁的对象。此外,还探讨了单例模式的潜在问题。
摘要由CSDN通过智能技术生成

设计模式之工厂方法模式(FactoryMethod Pattern)

相关定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类

工厂方法的实现主要是通过以下步骤

  1. 创建一个抽象工厂,里面定义一个抽象方法;
  2. 创建具体工厂继承抽象工厂(如过抽象工厂是接口则实例化,下面例子使用的是抽象类、方法)实现父类的(上级接口的)方法;
  3. 创建抽象产品接口,里面定义一个方法
  4. 创建具体产品实现抽象产品接口,实现上级方法

适用场景:

1、当一个类不知道它所必须创建的对象的类的时候;

2、当一个类希望由它的子类来指定它所创建的对象的时候;

3、当类将创建对象的职责委托给多个帮忙子类的中的某一个,并且你希望将哪一个帮助子类是代理者者一信息局部化时。

优点

  • 可扩展添加一个产品不用修改原来的代码,添加一个产品的实现类和一个工厂的实现类即可(开闭原则)。
  • 隔离性,客户端只知道工厂就行,不需要知道创建产品的细节,实现系统解耦(单一原则)
  • 为整个系统提供一个全局访问点。

缺点

  • 不适用于变化频繁的对象;

  • 滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;

  • 如果实例化的对象长时间不被利用,系统会认为该对象是垃圾而被回收,这可能会导致对象状态的丢失;

    实现的方式
/**
 * @author :高铭
 * @date :Created in 2020/10/9 22:32
 */
public class FactoryMethod {
    public static void main(String[] args) {
        FactoryMethodA fma = new FactoryA();
        Prodcut pa = fma.creatProdcut();
        pa.getA();
    }
}

/**
 * 抽象产品
 */
interface Prodcut{
    void getA();
}
/**
 *具体产品
 */
class ProdcutA implements Prodcut{
    @Override
    public void getA() {
        System.out.println("生产了A产品");
    }
}

/**
 * 抽象工厂
 */
abstract class FactoryMethodA{
    abstract Prodcut creatProdcut();
}
/**
 * 具体工厂
 */
class FactoryA extends FactoryMethodA{
    @Override
    Prodcut creatProdcut() {
        return new ProdcutA();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值