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

工厂模式

时间:2024-06-06 13:56:47浏览次数:8  
标签:Product createProduct 模式 class public new 工厂 method

Desc

定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使的一个类的实例化延迟到了子类

场景

  • 当你不知道改使用对象的确切类型的时候
  • 当你希望为库或框架提供扩展其内部组件的方式时

优点

  • 将具体产品和创建者解耦
  • 符合单一职责原则
  • 符合开闭原则

实现

简单工程

public class Test {
    public static void main(String[] args) {
        // 简单工程
        Product p1 = Application.getObject("1");
        p1.method();
        Product p2 = Application.getObject("2");
        p2.method();   
    }
}

class Application {
    private static Product createProduct(String type) {
        Product product;
        switch (type) {
            case "1":
                product = new ProductA();
                break;
            case "2":
                product = new ProductB();
                break;
            default:
                product = null;
        }
        return product;
    }

    public static Product getObject(String type) {
        return createProduct(type);
    }
}

工厂方法

  1. 不同实体类
public interface Product {
    public void method();
}

public class ProductA implements Product{
    @Override
    public void method() {
        System.out.println("ProductA.method executed.");
    }
}
public class ProductB implements Product{
    @Override
    public void method() {
        System.out.println("ProductB.method executed.");
    }
}

  1. 抽象类及具体实现类
public abstract class ProductFactory {
    abstract Product createProduct();
    Product getObject(){
        return createProduct();
    }
}

public class ProductAService extends ProductFactory {
    @Override
    Product createProduct() {
        return new ProductA();
    }
}
public class ProductBService extends ProductFactory {
    @Override
    Product createProduct() {
        return new ProductB();
    }
}
  1. 测试类
 public static void main(String[] args) { 
        ProductFactory productA = new ProductAService();
        Product object = productA.getObject();
        object.method();

        ProductFactory productB = new ProductBService();
        Product object1 = productB.getObject();
        object1.method();  
    }

标签:Product,createProduct,模式,class,public,new,工厂,method
From: https://www.cnblogs.com/zrx1/p/18235010

相关文章

  • 【第5章】SpringBoot实战篇之登录模式切换
    文章目录前言一、接口扩展1.LoginStorage2.LocalLoginStorage3.RedisLoginStorage4.参数配置二、登录相关接口改动1.登录接口2.登录拦截器总结前言前面分别介绍了本地Map和redis存储用户登录信息,但是第二天我登录就出现问题了,因为我Redis部署在虚拟机里面,不......
  • 观察者模式
    一、什么是观察者模式观察者模式通常由两个对象组成:观察者和被观察者。当被观察者状态发生改变时,它会通知所有的观察者对象,使他们能够及时做出响应。观察者模式属于行为型模式。 二、特点优点:被观察者和观察者对象之间不需要知道对方的具体实现,只需要知道对方的接口,避......
  • 单例模式
    DESC保证一个类只有一个实例,并且提供一个全局访问点场景:重量级的对象,不需要多个实例,如线程池,数据库连接池实现1.懒汉模式延迟加载的方式只有在真正使用的时候,才开始实例化线程安全问题doublecheck加锁优化编译器(JIT)cpu有可能对指令进行重排序,导致使用到尚未初始......
  • react中推荐使用发布订阅模式,进行跨多层级的组件间通信和事件传递吗?
    在React中,虽然发布订阅模式(Pub/Sub)可以作为一种实现跨多层级组件间通信的方法,但它并不是React官方推荐的主要手段,尤其是在ReactHooks和ContextAPI普及之后。React推荐的跨组件通信方法主要包括:Propsdrilling:最直接的方式,通过props从父组件向子组件传递数据,适合简单的数据流......
  • 跟着GPT学设计模式之观察者模式
    你好,这里是codetrend专栏“跟着GPT学设计模式”。引言观察者模式(ObserverPattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,其依赖对象都能够收到通知并自动更新。观察者模式(ObserverDesignPattern)也被称为发布订阅模式(Publish-S......
  • 【设计模式】观察者模式
    设计模式【设计模式】工厂方法模式【设计模式】抽象工厂模式【设计模式】单例模式【设计模式】策略模式【设计模式】观察者模式 一、介绍观察者模式是一种行为设计模式,当一个对象的状态发生改变时,依赖(观察)它的对象会接收到通知,并进行自动的更新操作。举例:某公司发布了......
  • Vue 3 Composition API与Hooks模式
    Vue3的CompositionAPI引入了Hook函数的概念,这是一种更加模块化和可重用的状态管理和逻辑组织方式。自定义Hook首先,我们创建一个自定义Hook,例如useCounter,它封装了计数器的逻辑://useCounter.jsimport{ref}from'vue';exportfunctionuseCounter(){c......
  • SAP: SALV 利用控制器的模式
    SAP:SALV 例子利用控制器的模式利用控制器的SALV方法与实际业务中最常用的利用GRID显示ALV的方法其步骤一样。为了在画面上显示ALV事例,必须要存在连接画面和ALVGRID控件的SAP容器控件。SAP控制器为了充当LINKER将SAP控件包含于自己的领域。SAP控件包含SAPTree、SAPPIC......
  • 存储引擎及特点、约束条件、严格模式、基本字段类型(整型、浮点型、字符串、日期时间
    【一】存储引擎在平常我们处理的文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制针对不同的数据应该有对应不同的处理机制存储引擎就是不同的处理机制。#查看所有引擎showengines;四种主要的存储引擎(1)Innodb引擎是MySQL5.5版本之后的默认存......
  • 【设计模式】工厂模式(创建型)⭐⭐⭐
    文章目录1.概念1.1什么是工厂模式1.2优点与缺点2.实现方式2.1简单工厂模式(SimpleFactory)2.2简单工厂模式缺点2.3抽象工厂模式(AbstractFactoryPattern)3.Java哪些地方用到了工厂模式4.Spring哪些地方用到了工厂模式1.概念1.1什么是工厂模式工厂模式属......