Java设计模式之工厂模式详解

目录

1.什么是工厂模式?

2.作用:

3.核心本质:

4.详细分类:

5.简单工厂模式/静态工厂模式:

6.工厂方法模式

7.两种模式对比总结:


1.什么是工厂模式?

工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。

2.作用:

实现类创建者和调用者的分离

1).工厂模式是为了解耦:把对象的创建和使用的过程分开

2).工厂模式可以降低代码重复

3)因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误

3.核心本质:

  • 实例化对象不使用new,用工厂方法代替

  • 将选择实现类,创建对象统一管理和控制。从而将调用者和我们的实现类解耦   

4.详细分类:

1.简单工厂模式/静态工厂模式

  • 用来生产同一等级结构中的任意产品

2.工厂方法模式

  • 用来生产同一等级结构中的固定产品

3.抽象工厂模式

  • 围绕一个超级工厂创建其他工厂。该超级工行又称为其他工厂的工厂

5.简单工厂模式/静态工厂模式:

弊端:如果你不修改代码(工厂类),无法增加新的产品

代码实例(实现一个买汽车的过程)

1)构建一个汽车接口

package gongchang.simple;

public interface Car {
   void name();
}

2)分别两种汽车型号类继承这个接口

特斯拉

public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("我是特斯拉");
    }
}

五菱

public class Wuling implements Car{
    @Override
    public void name() {
        System.out.println("我是五菱宏光");
    }
}

 3)构建工厂类

public class CarFactor {
    public static Car getCar(String car){
        if (car.equals("五菱")){
            return new Wuling();
        }else if(car.equals("特斯拉")){
            return new Tesla();
        }else {
            return null;
        }
    }
}

 4)创建消费者类,使用工厂创建这个对象,从而避免了手动new对象

通俗来讲就是我去买汽车去工厂买了已经造好的汽车,而不是自己手动去new一辆汽车

public class Consumer {
    public static void main(String[] args) {
        //使用工厂创建
        Car car = CarFactor.getCar("特斯拉");
        car.name();
    }
}

 

 5)优化:修改工厂类的结构

略微增加了可扩展性

public class CarFactor {
    public static Car getWuling(){
       return new Wuling();
    }
    public static Car getTesla(){
        return new Tesla();
    }
}

6.工厂方法模式

创建新产品时进行横向扩展,创建新的工厂类,不需要修改原有代码

1)创建汽车接口,车型类,消费者类这三步与简单工厂模式相同

2)创建汽车工厂接口

 3)当添加每种型号汽车时,分别调用上面的接口创建自己的工厂类

public class TeslaFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Tesla();
    }
}
public class WulingFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Wuling();
    }
}

7.两种模式对比总结:

简单工厂模式:

  • 结构复杂度较优

  • 代码复杂度较优

  • 编程复杂度较优

  • 管理复杂度较优

根据设计原则应选择:工厂方法模式

根据实际业务应选择:简单工厂模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值