设计模式(2):简单工厂模式

尺有所短,寸有所长;不忘初心,方得始终。

简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种设计模式之一

简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

一、简单工厂模式角色及其职责

  • 工厂(Creator)角色

    简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

  • 抽象产品(Product)角色

    简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口

  • 具体产品(Concrete Product)角色

    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

二、案例

以生产汽车为例,汽车有很多种,对于购买汽车的用户来说,不用管汽车有多少种类,只需要在厂家购买自己所要的汽车就可以,而不同的用户买的汽车不一样,所以对于厂家而言就需要对不同的客户生产不同的汽车。

以上案例的简单工厂UML类图:

设计模式(2):简单工厂模式

三、简单工厂模式实现

  • 定义一个接口或者抽象类,确定工厂行为

    /**
    * 抽象产品类代码
    */

    public interface ICar {
    void GetCar();
    }
  • 定义具体的产品类  并且实现抽象类

    /**
    * 具体汽车 : 越野车
    */

    public class JeepCar implements ICar {

    @Override
    public void GetCar() {
    System.out.println("这是越野车");
    }
    }

    /**
    * 具体汽车 : 跑车
    */

    public class SportCar implements ICar {

    @Override
    public void GetCar() {
    System.out.println("这是跑车");
    }
    }

    /**
    * 具体汽车 : 两箱车
    */

    public class HatchbackCar implements ICar {

    @Override
    public void GetCar() {
    System.out.println("这是两箱车");
    }
    }
  • 简单工厂代码 Factory

    /**
    * 简单工厂核心代码
    *
    * 工厂类,具体实现
    */

    public class Factory{
    public ICar GetCar(String carType){
    switch (carType){
    case "跑车":
    return new SportCar();
    case "越野车":
    return new JeepCar();
    case "两箱车":
    return new HatchbackCar();
    default:
    return null;
    }
    }
    }
  • 客户端调用

    public static void main(String[] args) {
    ICar iCar = new Factory().GetCar("跑车");
    if(null == iCar){
    System.out.println("没有这个车型");
    }
    iCar.GetCar();
    }

四、简单工厂的优点/缺点

  • 优点

    • 工厂类是处理必要的逻辑判断是简单工厂的核心。根据客户端的参数决定创建具体对象。

    • 通过使用工厂类,客户端与产品类解耦。

  • 缺点

    • 由于工厂类集中了所有实例的创建逻辑,违反了开闭原则,将全部创建逻辑集中到了一个工厂类中。
    • 新增产品类时需要修改工厂类,扩展性较差,不易维护。

五、简单工厂模式和策略模式区别

  • 策略模式和简单工厂模式都是通过多态来实现不同子类的选取。
  • 在简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取相应对象的工作交给模式的使用者,它本身不去做选取工作。
    • 简单工厂模式中只需要传递相应的条件就能得到想要的一个对象,然后通过这个对象实现算法的操作
    • 策略模式使用时必须首先创建策略对象作为参数传递进去,通过该对象调用不同的算法。

六、工厂方法模式和简单工厂模式的区别

  • 简单工厂模式

    • 工厂类负责创建的对象比较少,不会造成工厂方法中的业务逻辑太过复杂。

    • 客户端只知道传入工厂类的参数,对于如何创建对象并不关心。

  • 工厂方法模式

    • 客户端不知道它所需要的对象的类。

    • 抽象工厂类通过其子类来指定创建哪个对象。

七、总结

创建型模式对类的实例化过程进行了抽象,能够将对象的创建与对象的使用过程分离。

简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式适用场景:工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。

– END –


原文始发于微信公众号(星河之码):设计模式(2):简单工厂模式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/27211.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!