马图图的个人博客-设计模式02 - 工厂模式

设计模式02 - 工厂模式

马图图
2022-11-12 / 0 评论 / 82 阅读

工厂模式

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

简单工厂模式

介绍

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

public interface Car {
    /**
     * 汽车运行接口
     */
    void run();
}

public class Benz implements Car{
    @Override
    public void run() {
        System.out.println("奔驰 is running!");
    }
}
public class Bike implements Car{
    @Override
    public void run() {
        System.out.println("我只有自行车!");
    }
}
public class Bmw  implements Car{
    @Override
    public void run() {
        System.out.println("宝马 is running!");
    }
}
public class CarFactory {
    public static Car getCar(String type) {
        if("benz".equalsIgnoreCase(type)) {
            return new Benz();
        } else if("bmw".equalsIgnoreCase(type)) {
            return new Bmw();
        } else {
            return new Bike();
        }
    }
}
public class Client {
    public static void main(String[] args) {
        Car bmw = CarFactory.getCar("bmw");
        bmw.run();
        Car benz = CarFactory.getCar("benz");
        benz.run();
    }
}

工厂方法模式

​ java开发要遵循开闭原则,如果有一天我们需要增加一个新的车,那么必须要修改CarFactory,这样会很麻烦,可以使用工厂方法模式。

public interface Factory {
    /**
     * 创建方法
     * @return
     */
    Car create();
}
public class BenzFactory implements Factory{
    @Override
    public Car create() {
        return new Benz();
    }
}
public class BikeFactory implements Factory{
    @Override
    public Car create() {
        return new Bike();
    }
}
public class BmwFactory implements Factory{
    @Override
    public Car create() {
        return new Bmw();
    }
}
public class Client {
    public static void main(String[] args) {
        BenzFactory benzFactory = new BenzFactory();
        Car benz = benzFactory.create();
        benz.run();
        BmwFactory bmwFactory = new BmwFactory();
        Car bmw = bmwFactory.create();
        bmw.run();
    }
}

优缺点说明

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

工厂模式应用源码分析

​ 在 JDK 中的 Calendar 类中,使用了简单工厂模式

![image-20221112173228460](E:\学习笔记\Java\设计模式\设计模式 - 工厂模式.assets\image-20221112173228460.png)

小结

  • 工厂模式的意义是将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和著项目的依赖关系的解耦,从而提高项目的扩展和维护性。
  • 设计模式的依赖抽象原则
    • 创建对象实例时,不要直接 new 类,而是把这个 new 类的动作放在一个工厂的方法中,并返回。
    • 不要让类继承具体类,而是继承抽象类或者时实现 interface (接口)
    • 不要覆盖基类中已经实现的方法(尽量不要重写父类的方法)
下一篇
评论
说点什么吧?
OωO 取消
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)
  •  ̄﹃ ̄
  • (/ω\)
  • →_→
  • (ノ°ο°)ノ
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ
  • ╮(╯▽╰)╭
  • (。•ˇ‸ˇ•。)
  • >﹏<
  • ( ๑´•ω•)
  • "(´っω・`。)
  • "(ㆆᴗㆆ)

微信

支付宝