首页 > 其他分享 >工厂设计模式

工厂设计模式

时间:2024-10-26 10:43:47浏览次数:6  
标签:Product void public 产品 工厂 设计模式 class

工厂设计模式

工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,工厂模式的核心是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪一个类。工厂模式将实例化的过程延迟到子类中进行。

类型:

工厂设计模式有不同的变种,其中包括:

  1. 简单工厂模式:由一个工厂对象来决定创建出哪一个类的对象。

简单工厂模式负责创建产品对象而不向客户端直接暴露创建逻辑。简单工厂模式中,客户端请求创建一个产品对象,工厂返回一个根据参数创建的产品对象。如下面的代码:

public class Main {
    public static void main(String[] args) {
        SimpleFactory factory = new SimpleFactory();
        Product productA = factory.createProduct("A");
        Product productB = factory.createProduct("B");
        productA.operation();
        productB.operation();
    }
}

// 产品接口
interface Product {
    // 每一个产品需要完成的功能
    void operation();
}

// 具体产品A
class ProductA implements Product {

    @Override
    public void operation() {
        System.out.println("Product A is doing its job...");
    }
}

// 具体产品B
class ProductB implements Product {

    @Override
    public void operation() {
        System.out.println("Product B is doing its job...");
    }
}

// 简单工厂类
class SimpleFactory {
    public Product createProduct(String type) {
        if ("A".equals(type)) {
            return new ProductA();
        } else if ("B".equals(type)) {
            return new ProductB();
        }

        return null;
    }
}

结果如下:

Product A is doing its job...
Product B is doing its job...
  1. 工厂方法模式:定义一个创建产品对象的工厂接口,而子类决定实例化哪一个具体的类。

工厂方法模式定义了一个创建产品对象的接口,但允许子类决定实例化哪一个类。工厂方法模式让类的实例化推送到子类中。如下面的代码:

public class Main {
    public static void main(String[] args) {
        AbstractFactory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();

        AbstractFactory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();

        productA.operation();
        productB.operation();
    }
}


// 抽象产品接口
interface Product {
    void operation();
}

// 具体产品A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("A 产品正在工作");
    }
}

// 具体产品B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("B 产品正在工作");
    }
}

// 抽象工厂接口
interface AbstractFactory {
    Product createProduct();
}

// 具体工厂A
class ConcreteFactoryA implements AbstractFactory{
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂B
class ConcreteFactoryB implements AbstractFactory{
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

运行结果如下:

A 产品正在工作
B 产品正在工作
  1. 抽象工厂模式:提供一个创建一系列相关或依赖对象的接口,而无需指定它们具体的类。

抽象工厂模式提供一个创建一系列相关或依赖对象的接口,而无需指定它们具体的类,抽象工厂模式通常适用于一组相关的对象,它们共同工作,如下面的代码:

public class Main {
    public static void main(String[] args) {
        AbstractFactory factory = new ConcreteFactory();
        ProductA productA = factory.createProductA();
        ProductB productB = factory.createProductB();

        productA.operationA();
        productB.operationB();
    }
}


// 抽象产品族A接口
interface ProductA {
    void operationA();
}

// 抽象产品族B接口
interface ProductB {
    void operationB();
}

// 具体产品族A实现
class ConcreteProductA implements ProductA{
    @Override
    public void operationA() {
        System.out.println("A族产品正在工作");
    }
}

// 具体产品族B实现
class ConcreteProductB implements ProductB{
    @Override
    public void operationB() {
        System.out.println("B族产品正在工作");
    }
}

// 抽象工厂接口
interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

// 具体工厂
class ConcreteFactory implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB();
    }
}

运行结果如下:

A族产品正在工作
B族产品正在工作

优点:

  • 减少系统耦合度
  • 符合开闭原则,增加新的产品对象不影响已存在的工厂结构。

总结:

  • 简单工厂模式:适用于客户端只需要知道产品的类型,不需要关注具体的产品创建逻辑。
  • 工厂方法模式:适用于需要将产品的创建逻辑封装在不同的工厂中,客户端可以根据需要选择不同的工厂。
  • 抽象工厂模式:适用于需要创建一组相关或依赖的对象,并希望将这些对象的创建逻辑封装在一个工厂中。

标签:Product,void,public,产品,工厂,设计模式,class
From: https://www.cnblogs.com/lilyflower/p/18503734

相关文章

  • 微服务设计模式-边车模式(Sidecar Pattern)
    微服务设计模式-边车模式(SidecarPattern)定义边车模式(SidecarPattern)是一种将应用程序的功能分离到一个独立的进程或容器中的设计模式。这个独立的进程或容器被称为边车(Sidecar),它与主应用程序(MainApplication)一起运行,并为其提供额外的功能和服务。边车模式可以看作是一......
  • 实验3:工厂方法模式
    [实验任务一]:加密算法目前常用的加密算法有DES(DataEncryptionStandard)和IDEA(InternationalDataEncryptionAlgorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。实验要求:1.画出对应的类图;2.提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相......
  • 工厂车间非授权人员闯入报警系统
    工厂车间非授权人员闯入报警系统采用了yolov7模型的AI视觉算法技术,工厂车间非授权人员闯入报警系统通过识别监控画面中的人员,能够实时检测并识别出非车间人员的闯入行为。一旦系统检测到非授权人员进入禁止进入区域,立即发出报警信号,通知现场的安保人员注意并采取必要措施。同时,系......
  • 学习高校课程-软件设计模式-单例模式(lec5)
    原文链接Singleton:IntentSingletonisacreationaldesignpatternthatletsyouensurethataclasshasonlyoneinstance,whileprovidingaglobalaccesspointtothisinstance.Singleton是一种创建性设计模式,它允许您确保一个类只有一个实例,同时提供对此实例的......
  • 学习高校课程-软件设计模式-建造者模式和原型模式(lec4)
    Builder:ProblemExample:acomplexobjectthatrequireslaborious,step-by-stepinitializationofmanyfieldsandnestedobjects一个复杂对象的创建通常由多个部分组成,这些部分的组合经常变化Builder:SolutionExtracttheobjectconstructioncodeoutofitsown......
  • 如何使用格式工厂将 PDF 转换为 Word 文档
    格式工厂是一款多功能的多媒体文件转换工具,它不仅可以转换音频和视频文件,还可以处理文档格式之间的转换。下面是一篇详细的教程,简鹿办公教你如何使用格式工厂将PDF文档转换为Word(.docx)格式。需要注意的是,如果PDF文件是由扫描件组成的图片,则可能无法直接转换为可编辑的文本......
  • 学习高校课程-软件设计模式-工厂模式(lec3)
    FactoryMethod:ProblemExample:alogisticsmanagementapplication示例:物流管理应用程序–Firstversion:handlingtransportationbytrucks,withaTruckclass–Later:newrequeststoincorporatesealogistics,andmore–第一个版本:处理卡车运输,卡车类别–......
  • 设计模式(六)适配器模式详解
    设计模式(六)适配器模式详解结果型模式:从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。适配器模式简介定义:适配器模式是一种结构型模式,它不允许不兼容的接口协同工作。通过创建一个适配器类,将一个类的接口转换成客户端期望的另一个接口。Adapter模式......
  • 设计模式(五)原型模式详解
    设计模式(五)原型模式详解原型模型简介定义:原型模型是一种创建型设计模型,它允许通过克隆/复制现有对象来创建新的对象,而无需通过常规的构造函数进行实例化。这种方式的主要优势是在运行时不需要知道具体的类,只需一个实例对象即可。实现方法实现Cloneable接口:在Java中,如......
  • 行为设计模式 -观察者模式- JAVA
    责任链设计模式一.简介二.案例2.1抽象处理者(Handler)角色2.2具体处理者(ConcreteHandler)角色2.3测试三.结论3.1优缺点3.2示例3.3要点前言这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。作者:神的孩子都在歌唱一.简介......