工厂模式详解汇总

1.普通造车模式

车的接口:

package com.zhou.factory;

public interface Car {
    public void run();
}

比亚迪车

package com.zhou.factory;

public class BiyadiCar implements Car{
    @Override
    public void run() {
        System.out.println("比亚迪");
    }
}

吉利车

package com.zhou.factory;

public class JiliCar implements Car{
    @Override
    public void run() {
        System.out.println("吉利汽车");
    }
}

特斯拉

package com.zhou.factory;

public class TeslaCar implements Car{
    @Override
    public void run() {
        System.out.println("特斯拉");
    }
}

这3种车都实现了car接口

消费者

package com.zhou.factory;

public class Consumer {
    public static void main(String[] args) {
//        普通造车模式
        Car biyadi = new BiyadiCar();
        Car jili = new JiliCar();
        biyadi.run();
        jili.run();
        

    }
}

缺点:用户需要了解Car接口和它的实现类,才能在Consumer类中new一个相应的对象

2简单工厂模式 对1这种普通模式的改进

在1的基础上加上一层(架构中没有什么是加一层解决不了的,如果有,那就加两层)
加一层车工厂

package com.zhou.factory;

public class CarFactory {
    public Car getCar(String name){
        if (name.equals("biyadi"))
            return new BiyadiCar();
        else if (name.equals("tesla"))
            return new TeslaCar();
        else if (name.equals("jili"))
        return new JiliCar();
        return null;
    }
}

消费者

package com.zhou.factory;

public class Consumer {
    public static void main(String[] args) {
/*//        普通造车模式
        Car biyadi = new BiyadiCar();
        Car jili = new JiliCar();
        biyadi.run();
        jili.run();*/


//        简单工厂模式
        CarFactory c =  new CarFactory();
        c.getCar("biyadi").run();
        c.getCar("jili").run();


    }
}

用户只需要知道车的名字,即可调用车工场返回相应车的对象,无需知道Car接口和它的实现类,方便实用
缺点:每添加一个新一种车,就要改动车工厂的代码,不满足开闭原则

在这里插入图片描述

3 工厂方法模式 对2的进一步改进

在这里插入图片描述

将车工厂抽象成一个接口

package com.zhou.method;

public interface CarFactory {
    public Car getCar();
}

每种车有对应的车工厂(实现了车工厂的接口)
例如比亚迪

package com.zhou.method;

public class BiyadiCarFactory implements CarFactory{
    @Override
    public Car getCar() {
        return new BiyadiCar();
    }
}

每次新来一种车只需要实现这种车实现Car接口,这种车工厂实现CarFactory接口,完成解耦,满足开闭原则
但是增加了代码量,实际中更偏向于选择第二种简单工厂模式。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值