Java设计模式之工厂模式

本文介绍了简单工厂模式、工厂方法模式及抽象工厂模式的概念与实现。通过示例代码详细讲解了每种模式的特点、优缺点及其应用场景。

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

简单工厂模式

  • 定义一个类负责创建其他类的实例
  • 被创建的类实现共同接口

文章待改进……


interface Work {
    public void doWork();
}

class WorkA implements Work {
    public void doWork() {
        System.out.println("do work A");
    }
}

class WorkB implements Work {
    public void doWork() {
        System.out.println("do work B");
    }
}
//简单工厂 提供一个方法创建工作实例
class Factory {
    public Work createWork(int i) {
        switch (i) {
        case 0:
            return new WorkA();
        case 1:
            return new WorkB();
        }
        return null;
    }
}

测试:

Factory factory = new Factory();
Work work = factory.createWork(1);
work.doWork();

Tips:简单工厂模式不是23种里的一种

实现封装
扩展性差:

  • 添加或修改工作需修改工厂类方法
  • 不同的任务需要不同额外参数的时候
  • 传递参数出错将不能得到正确的对象

假如要添加Rest方法

interface Rest {
    public void doRest();
}

class RestA implements Rest {
    public void doRest() {
        System.out.println("do rest A");
    }
}

class RestB implements Rest {
    public void doRest() {
        System.out.println("do rest B");
    }
}

工厂方法模式


//抽象工厂类
abstract class Factory{
    public abstract Work createWork();
}
class WorkFactory extends Factory{
    public Work createWork() {
        if(1==1)
        return new WorkA();
        if(1==2)
        return new WorkB();
    }
}
class RestFactory extends Factory{
    public Work createRest() {
        if(1==1)
        return new RestA();
        if(1==2)
        return new RestB();
    }
}

优点

  • 当需求变化,只需要增删相应的类,不需要修改已有的类

缺点

  • 每次新增一个具体任务类,也要同时新增一个具体工厂类

抽象工厂模式

以上介绍的工厂都是单任务系,只能执行Work。
抽象工厂是多任务系,除Work外还可执行Rest。

interface Rest {
    public void doRest();
}

class RestA implements Rest {
    public void doRest() {
        System.out.println("do rest A");
    }
}

class RestB implements Rest {
    public void doRest() {
        System.out.println("do rest B");
    }
}
abstract class Factory{
    public abstract Work createWork();
    public abstract Rest createRest();
}
class AFactory extends Factory{
    public Work createWork() {
        return new WorkA();
    }
    public Rest createRest() {
        return new RestA();
    }
}
class BFactory extends Factory{
    public Work createWork() {
        return new WorkB();
    }
    public Rest createRest() {
        return new RestB();
    }
}

违反低耦合
修改抽象工厂类,所有的具体工厂子类都需要被修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值