返回顶部
首页 > 资讯 > 后端开发 > Python >Java创建型设计模式之工厂方法模式深入详解
  • 250
分享到

Java创建型设计模式之工厂方法模式深入详解

2024-04-02 19:04:59 250人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录简单工厂模式定义产品对象创建工厂类工厂使用反射工厂方法模式概述应用场景优缺点主要角色工厂方法模式的基本使用创建抽象产品创建具体产品创建抽象工厂创建具体工厂客户端执行简单工厂模式

简单工厂模式

简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例,但是它不属于设计模式

简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。

定义产品对象

public interface ICar {
    void create();
}
public class BMCar implements ICar{
    @Override
    public void create(){
        System.out.println("制造BM车");
    }
}
public class ADCar implements ICar {
    @Override
    public void create() {
        System.out.println("制造AD车");
    }
}

创建工厂类

创建一个实现工厂类,所有的对象交由该工厂类创建

public class CarFactory {
    public ICar create(ICar car) {
        if (car instanceof BMCar) {
            return new BMCar();
        } else if (car instanceof ADCar) {
            return new ADCar();
        } else {
            return null;
        }
    }
}
    public static void main(String[] args) {
        CarFactory carFactory = new CarFactory();
        ICar bm = carFactory.create(new BMCar());
        bm.create();
        ICar ad = carFactory.create(new ADCar());
        ad.create();
    }

工厂使用反射

上述方式随着业务扩展,就需要修改createAnimal方法中的逻辑代码,不符合开闭原则。

可使用反射技术,即使业务变化扩展,也不需要修改AnimalFactory中的逻辑代码

public class CarFactory {
    public ICar create(String className) {
        try {
            if (!(null == className || "".equals(className))) {
                return (ICar) Class.forName(className).newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
    public static void main(String[] args) {
        CarFactory carFactory = new CarFactory();
        ICar bm = carFactory.create("cn.ybzy.demo.BMCar");
        bm.create();
    }

上述方式的缺点是方法参数是字符串,有着不可控的风险。可进一步优化,使用强制类型限制,控制参数传递

public class CarFactory {
    public ICar create(Class<? extends ICar> clazz) {
        try {
            if (!(null == clazz)) {
                return clazz.newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
    public static void main(String[] args) {
        CarFactory carFactory = new CarFactory();
        ICar bm = carFactory.create(BMCar.class);
        bm.create();
    }

工厂方法模式

概述

工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。工厂方法模式属于创建型模式。

工厂模式(Factory Pattern)是Java中最常用的设计模式之一。它提供了一种创建对象的最佳方式。

它定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

在工厂方法模式中只需要关心所需产品对应的工厂,无须关心创建细节,而且加入新的产品符合开闭原则。

应用场景

1.创建对象需要大量重复的代码。

2.客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。

3.一个类通过其子类来指定创建哪个对象。

优缺点

优点:

1.一个调用者想创建一个对象,只需要知道其名称就可以

2.扩展性高,如果想增加一个产品,只需要扩展一个工厂类

3.屏蔽产品的具体实现,调用者只关心产品的接口

缺点:

1.每增加一个产品时,都需要增加一个具体类和对象实现工厂,使系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

主要角色

1.抽象产品角色(Product)

工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。

2.具体产品角色(Concrete Product)

这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

3.抽象工厂角色(Creator)

是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

4.具体工厂角色(Concrete Creator)

这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。

工厂方法模式的基本使用

创建抽象产品

创建抽象产品角色,工厂类所创建的产品的父类,封装了产品对象的公共方法

public abstract class AbstractCar {
    public abstract void run();
}

创建具体产品

public class Car extends AbstractCar {
    public void run() {
        System.out.println("Car run");
    }
}

创建抽象工厂

public abstract class ICarFactory {
    public abstract <T> T create(Class<T> clazz);
}

创建具体工厂

创建多个实现抽象工厂接口的具体工厂类。负责实现创建产品的内部逻辑,该工厂类可以被直接调用,创建所需的具体对象。

public class CarFactory extends ICarFactory {
    @Override
    public <T> T create(Class<T> clazz) {
        Car car;
        try {
            car = (Car) Class.forName(clazz.getName()).getConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return (T) car;
    }
}

客户端执行

通过一个工厂类,对实现了同一接口的一些类进行实例的创建

    public static void main(String[] args) {
        ICarFactory factory = new CarFactory();
        Car car = factory.create(Car.class);
        car.run();
    }

Car run

到此这篇关于Java创建型设计模式之工厂方法模式深入详解的文章就介绍到这了,更多相关Java工厂方法模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java创建型设计模式之工厂方法模式深入详解

本文链接: https://lsjlt.com/news/168298.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java创建型设计模式之工厂方法模式深入详解
    目录简单工厂模式定义产品对象创建工厂类工厂使用反射工厂方法模式概述应用场景优缺点主要角色工厂方法模式的基本使用创建抽象产品创建具体产品创建抽象工厂创建具体工厂客户端执行简单工厂模式 ...
    99+
    2024-04-02
  • Java 深入理解创建型设计模式之抽象工厂模式
    1.什么是抽象工厂模式? 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类。抽象工厂模式可以将简单工厂模式和工厂方法模式进...
    99+
    2024-04-02
  • Java设计模式之工厂方法模式详解
    目录1.工厂方法是什么2.如何实现3.代码实现4.工厂方法模式的优点5.拓展1.工厂方法是什么 众所周知,工厂是生产产品的,并且产品供消费者使用。消费者不必关心产品的生产过程,只需要...
    99+
    2024-04-02
  • java编程创建型设计模式工厂方法模式示例详解
    目录1.什么是工厂方法模式?2.案例实现3.JDK中的工厂方法模式1.什么是工厂方法模式? 工厂方法模式设计方案:  将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐...
    99+
    2024-04-02
  • .Net创建型设计模式之工厂方法模式(Factory Method)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)四、模式的组成五、工厂方法模式的代码实现六、Factory Method模式的几个要点1、工...
    99+
    2024-04-02
  • Java 深入理解创建型设计模式之原型模式
    1.思考问题 现在有一只羊 tom,姓名为: tom,年龄为:1,颜色为:白色,请编写程序创建和 tom羊属性完全相同的10只羊。 按照传统的思路来,我们可能会按照下面的方式去写。 ...
    99+
    2024-04-02
  • 深入理解Java设计模式之抽象工厂模式
    目录一、什么是抽象工厂模式二、抽象工厂模式的应用场景三、抽象工厂模式和工厂方法模式对比四、抽象工厂模式的优缺点五、抽象工厂模式的实现六、总结一、什么是抽象工厂模式 为创建一组相关或相...
    99+
    2024-04-02
  • 深入理解Java设计模式之简单工厂模式
    目录一、什么是简单工厂模式二、简单工厂模式的结构三、简单工厂模式的应用场景四、简单工厂模式和工厂方法模式区别五、简单工厂模式和策略模式的异同六、简单工厂模式的优缺点七、简单工厂模式的...
    99+
    2024-04-02
  • java设计模式之工厂方法详解
    一、概念         工厂方法模式是类的创建模式,又叫虚拟构造子模式(virtual constructor) 或者多态性工厂模式。二、模式动机 ...
    99+
    2023-05-31
    java 设计模式 工厂方法
  • Java创建型设计模式之抽象工厂模式(Abstract Factory)
    目录抽象工厂模式概述产品等级结构与产品族优缺点主要角色抽象工厂模式的基本使用创建抽象产品创建具体产品创建抽象工厂创建具体工厂客户端执行抽象工厂模式 概述 抽象工厂模式(Abastra...
    99+
    2024-04-02
  • PHP设计模式中工厂模式深入详解
    目录简介简单工厂作用适用场景优点缺点代码工厂模式作用适用场景优点缺点代码抽象工厂作用适用场景优点缺点代码三者对比简介 工厂模式属于创建型模式,可以分为三种:简单工厂、工厂模式、抽象工...
    99+
    2022-11-13
    PHP工厂模式 PHP设计模式
  • Java 深入理解创建型设计模式之建造者模式
    1.提出问题 假如说,我们需要建房子:这一过程为打桩、砌墙、封顶。房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.3)请编写程序,完成需求。 传...
    99+
    2024-04-02
  • Java设计模式——工厂设计模式详解
    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。工厂模式的形态工厂模式主要用一下几种形态:简单工厂(Simple Factory)。2:工厂方法(Factory Method)。3:抽象工厂(Abstract...
    99+
    2023-05-30
    java 设计模式 ava
  • Java设计模式之抽象工厂模式详解
    目录一、什么是抽象工厂模式二、示例程序三、UML一、什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,这称之为抽象工厂模式(Abstract ...
    99+
    2024-04-02
  • Java设计模式之工厂模式案例详解
    目录分类案例需求方案一:简单工厂模式方案二:工厂方法模式方案三:抽象工厂模式对比分析总结 分类 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 案例 需求 根据蛋糕的不同口味,...
    99+
    2024-04-02
  • java设计模式之简单工厂模式详解
    简单工厂模式:由一个工厂对象决定创建出哪一种类的实例。抽象类public abstract class People { public abstract void doSth();}...
    99+
    2023-05-31
    java 设计模式 简单工厂
  • Python设计模式中的创建型工厂模式
    目录一、工厂模式(Factory Pattern)二、应用场景三、编码示例1、简单工厂模式2、工厂方法模式3、抽象工厂模式一、工厂模式(Factory Pattern) 工厂模式(F...
    99+
    2024-04-02
  • JAVA设计模式之工厂模式(三种工厂模式)
    1.工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设计模式。GOF 23 种设计模式...
    99+
    2023-09-04
    设计模式
  • .Net创建型设计模式之简单工厂模式(Simple Factory)
    简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类...
    99+
    2024-04-02
  • .Net创建型设计模式之抽象工厂模式(Abstract Factory)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)四、模式的组成五、抽象工厂的具体代码实现客户程序:应用到具体程序(现代风格):改造第一种改造...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作