工厂方法模式

先介绍一下简单工厂模式,简单工厂不属于23种设计模式,其划分粒度比较大,类型多的情况下,扩展性差

public interface Car {
    void run();
}

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

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

//汽车厂(4S店)
public class CarFactory {
     public static Car createCar(String name){
         if(name == null || "".equals(name)){
            return null;
         }
         if(name.equals("比亚迪")){
            return new BydCar();
         }
         if(name.equals("吉利")){
             return new JiLiCar();
         }
         return null;
    }
}

public class Client {
    public static void main(String[] args) {
        CarFactory.createCar("比亚迪").run();
        CarFactory.createCar("吉利").run();
    }
}

以上demo可以看出,每当我们需要新增一个车辆类型的时候就要再核心工厂类进行一次判断,扩展性很差,接下来介绍工厂方法。

工厂方法模式现实中使用的还是比较多的,多态性工厂模式,划分粒度要比简单工厂细一些,核心工厂类不再负责所有产品的创建,具体的创建工作交个子类去创建,核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口。

public interface Car {
    void run();
}

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

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

//汽车厂(4S店)
public inteface CarFactory {
     void createCar();
}

public class BydFactory implements CarFactory{
    @Override
    public Car createCar() {
        return new BydCar();
    }
}

public class JiLiFactory implements CarFactory{
    @Override
    public Car createCar() {
        return new JiLiCar();
    }
}

public class Client {
    public static void main(String[] args) {
        CarFactory bydFactory = new BydFactory();
        bydFactory.createCar().run();

        CarFactory jiliFactory = new JiLiFactory();
        jiliFactory.createCar().run();
    }
}

以上demo可以看出,核心工厂类只定义了必要的方法,不做创建工作,这样我们就不需要每新增一个类型都要修改核心工厂类的代码,只需要创建一个实现该接口的实现类(或者如果定义成抽象类则继承它,由于java不支持多继承,所以建议使用接口方式),再通过该实现类进行初始化即可,大大的提高了扩展性。工厂方法模式由工厂帮助我们初始化对象,减少程序耦合性,有利于后期的维护。将选择实现类、创建对象统一管理和控制,从而将调用者和我们的实现类解耦。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值