工厂设计模式

工厂设计模式

工厂设计模式分为:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

他们都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,目的是降低系统中代码耦合度,并且增强了系统的扩展性。

一、简单工厂模式

简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 20:30
 */
public class CarFactory {


    public Car createCar(String type){


        if("BMW".equals(type)){
            BMW car = new BMW();
            return car;
        }else if("BYD".equals(type)){
            BYD car = new BYD();
            return car;
        }
        return null;
    }

}

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 20:10
 */
public abstract class Car {


    private String color;

    public void  run (){

    }

}

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 20:30
 */
public class BMW extends Car{
    @Override
    public void run() {
        System.out.println("BMW启动");
    }
}

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 20:32
 */
public class BYD extends Car{

    @Override
    public void run() {
        System.out.println("BYD启动");
    }
}

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 20:33
 */
public class client {

    public static void main(String[] args) {

        CarFactory carFactory = new CarFactory();
        Car car = carFactory.createCar("BYD");
        car.run();

    }
}

二、工厂方法模式

我们说过java开发中要遵循开闭原则,如果将来有一天我想增加一个新的车,那么必须修改CarFactory,就不太灵活。解决方案是使用工厂方法模式。

抽象一个工厂接口

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 20:30
 */
public interface CarFactory {


    public Car createCar();

}

针对某一产品构建一个工厂方法

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 22:36
 */
public class BYDFactory implements CarFactory{
    @Override
    public Car createCar() {
        BYD byd = new BYD();
        return byd;
    }
}

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 22:35
 */
public class BMWFactory implements CarFactory{
    @Override
    public Car createCar() {
        BMW bmw = new BMW();
        return bmw;
    }
}

package com.assin;

/**
 * @Author:ASSIN
 * @Date: 2021/8/31 20:33
 */
public class client {

    public static void main(String[] args) {

        CarFactory carFactory = new BMWFactory();
       Car car = carFactory.createCar();
        car.run();

    }
}

好处

此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建。当系统需要新增一个产品是,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,使系统的扩展性变得很好,符合面向对象编程的开闭原则。

缺点

工厂方法模式虽然扩展性好,但是增加了编码难度,大量增加了类的数量,所以怎么选择还是看实际的需求

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值