剖析java三种工厂设计模式

java三种工厂设计模式

1. 简单工厂模式

简单工厂有以下三个主角:

  • Factory:工厂负责生产产品
  • AbstructProduct:抽象产品,就好比华为手机,我没说是华为那个型号手机。
  • Product:具体产品,就比如华为mate50。

我想要华为mate50手机,那华为mate50手机首先是华为手机,华为手机有什么功能就在下面接口写了。

public interface HuaweiiPhone {
    void call();
}

华为手机有mate50、p40、荣耀等等很多个手机,那我就要写个类来具体实现比如mate50手机了。下面就明确了华为手机有哪些了。

public class Mate50 implements HuaweiiPhone{
    @Override
    public void call() {
        System.out.println("use mate50 call phone...");
    }
}
public class P40 implements HuaweiiPhone{
    @Override
    public void call() {
        System.out.println("use p40 call phone...");
    }
}

知道华为手机有mate50、p40等这些手机,现在就要让工厂去把手机做出来了。下面这个工厂做了mate50和p40。

public class PhoneFactory {
    //创建什么手机,就是什么返回值类型
    public static HuaweiiPhone getiPhone(String phoneType){
        if("mate50".equalsIgnoreCase(phoneType)){
            return new Mate50();
        } else if ("p40".equalsIgnoreCase(phoneType)) {
            return new P40();
        }else {
            throw  new RuntimeException("没有这个产品...");
        }
    }
}

用户想买那个手机,就去这个店里(工厂)购买就行了。

public class Client {
    public static void main(String[] args) {
        HuaweiiPhone mate50 = PhoneFactory.getiPhone("mate50");
        mate50.call();
    }
}

以上就是简单工厂模式了。

2. 工厂方法模式

了解了简单工厂模式,我们来思考一下简单工厂模式有什么缺陷?

举个例子,有一天我要新增一个产品华为荣耀,我就必须去修改工厂(PhoneFactory)代码了,这就有点不灵活了。这种情况的解决方案就是工厂方法模式,下面详细说一下工厂方法模式。

工厂方法模式有四个主角:

  • AbstructFactory:抽象工厂,抽象工厂就用来生产具体工厂,比如华为公司。
  • Factory:具体工厂,具体工厂就是说每个型号的手机都会有一个专门的生产工厂,比如华为公司下的mate50生产线。
  • AbstructProduct:抽象产品
  • Product:具体产品

先写一个抽象工厂用于生产手机工厂,抽象工厂就好比建立一个手机公司,专门用来生产手机。

public interface AbstractFactory {
    HuaweiiPhone product();
}

这个手机公司下有很多生产线,比如生产mate50的,生产p40的,生产荣耀的。就是说某个型号的手机生产就是具体工厂。下面这两个分别是生产mate50和p40的工厂,这两个工厂实现抽象工厂。

public class Mate50Factory implements AbstractFactory{
    @Override
    public HuaweiiPhone product() {
        return new Mate50() ;
    }
}
public class P40Factory implements AbstractFactory{
    @Override
    public HuaweiiPhone product() {
        return new P40();
    }
}

然后呢mate50是什么?p40又是什么?它们是个手机,所以我们要建一个抽象手机的接口。

public interface HuaweiiPhone {
    void call();
}

具体的mate50、p40实现了这个手机接口,我们才知道是个手机嘛。

public class Mate50 implements HuaweiiPhone {
    @Override
    public void call() {
        System.out.println("use mate50 call phone...");
    }
}
public class P40 implements HuaweiiPhone {
    @Override
    public void call() {
        System.out.println("use p40 call phone...");
    }
}

最后这里是用户测试。

public class Client {
    public static void main(String[] args) {
        Mate50Factory mate50Factory = new Mate50Factory();
        HuaweiiPhone product = mate50Factory.product();
        product.call();
    }
}

这部分就是我们所说的工厂方法模式了。

3. 抽象工厂模式

最后这里提一下抽象工厂模式。抽象工厂模式其实就比工厂方法模式多了个业务,华为公司并不是只生产手机的吧,也有电脑啊耳机啊什么的。
抽象工厂模式解决就是新增的一个业务。

举个例子,现在华为公司卖华为电脑和华为手机,小米公司卖小米电脑和小米手机,对我们用户来说买手机就多了选择什么品牌的手机。这差不多就是抽象工厂模式的核心思想了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐大队队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值