第五章 工厂模式

news2024/11/18 19:32:41

文章目录

  • 一、简单工厂模式
    • 1、传统方式实现披萨订购( 可以忽略)
      • 披萨父类 Pizza
      • 子类胡椒披萨 PepperPizza
      • 子类印度披萨 GreekPizza
      • 订购披萨 OrderPizza
      • 订购披萨的 客户端 PizzaStore
      • 运行结果
      • 传统的方式的优缺点,新增子类需要修改的地方牵扯太多
      • 传统方式的究极耦合
    • 2、使用简单工厂模式 🔞🔞🔞
    • 完整代码
      • 披萨父类 Pizza
      • 披萨子类 GreekPizza / PepperPizza / ChinesePizza
      • 订购披萨 OrderPizza
      • 披萨简单工厂 SimpleFactory
      • 客户端订购披萨 PizzaStore
      • 添加披萨子类 USAPizza 美国披萨
      • 运行结果
  • 二、工厂方法模式
    • 完整代码
      • 披萨父类 Pizza
      • 北京奶酪披萨 BJCheesePizza
      • 北京胡椒披萨 BJPepperPizza
      • 伦敦奶酪披萨 LDCheesePizza
      • 伦敦胡椒披萨 LDPepperPizza
      • 抽象订购披萨 OrderPizza (充当工厂角色)
    • 订购披萨子类 BJOrderPizza / LDOrderPizza
      • BJOrderPizza
      • LDOrderPizza
      • 客户端订购披萨
    • 运行结果
      • 添加披萨口味
  • 三、抽象工厂模式
    • 代码示例
    • 抽象工厂 AbsFactory 接口
    • 北京披萨工厂 BJFactory 实现 AbsFactory 接口
    • 伦敦披萨工厂 LDFactory 实现 AbsFactory 接口
    • 披萨订购 OrderPizza 聚合 AbsFactory 接口
    • 客户端订购披萨
    • 运行结果
  • JDKの工厂模式: Calendar日历类
  • 工厂模式小结



一、简单工厂模式

在这里插入图片描述

1、传统方式实现披萨订购( 可以忽略)

在这里插入图片描述

披萨父类 Pizza

package tanchishell.SJMS.factory;


//抽象类 Pizza 后续的所有 披萨都继承该类
public abstract class Pizza {

    protected String name;

    //由于不同的披萨有着不同的原材料所有 准备原材料的方法是抽象的需要子类自己去实现
    public abstract void prepare();

    //一下流程是各种披萨共有的,子类继承后自动实现
    public void bake() {
        System.out.println(name + " baking;");
    }
    public void cut() {
        System.out.println(name + " cutting;");
    }
    public void box() {
        System.out.println(name + " boxing;");
    }
    public void setName(String name) {
        this.name = name;
    }
}

子类胡椒披萨 PepperPizza

package tanchishell.SJMS.factory;

public class PepperPizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("准备胡椒披萨的原材料");
    }
}

子类印度披萨 GreekPizza

package tanchishell.SJMS.factory;

public class GreekPizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("准备希腊披萨的原材料");
    }
}


订购披萨 OrderPizza

package tanchishell.SJMS.factory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class OrderPizza {
    //构造器

    public OrderPizza() {
        Pizza pizza = null;
        String orderType; // 订购披萨的类型
        do {
            orderType = getType();
            if (orderType.equals("greek")) {
                pizza = new GreekPizza();
                pizza.setName(" 希腊披萨 ");
            } else if (orderType.equals("pepper")) {
                pizza = new PepperPizza();
                pizza.setName("胡椒披萨");
            } else {
                System.out.println("请检查您的输入");
                break;
            }
            //输出 pizza 制作过程
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();

        } while (true);
    }


    //获取披萨的类型
    private String getType() {
        try {
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza 类型:");
            String str = strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

}


订购披萨的 客户端 PizzaStore

package tanchishell.SJMS.factory;

//订购Pizza的客户端
public class PizzaStore {
    public static void main(String[] args) {
        new OrderPizza();
    }

}

运行结果

在这里插入图片描述

传统的方式的优缺点,新增子类需要修改的地方牵扯太多

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

传统方式的究极耦合

新增一个子类,所有的OrderPizza类都需要修改,一旦过多,耦合度极高。

在这里插入图片描述

2、使用简单工厂模式 🔞🔞🔞

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码

披萨父类 Pizza

package tanchishell.SJMS.factory;


//抽象类 Pizza 后续的所有 披萨都继承该类
public abstract class Pizza {

    protected String name;

    //由于不同的披萨有着不同的原材料所有 准备原材料的方法是抽象的需要子类自己去实现
    public abstract void prepare();

    //以下流程是各种披萨共有的,子类继承后自动实现
    public void bake() {
        System.out.println(name + " baking;");
    }
    public void cut() {
        System.out.println(name + " cutting;");
    }
    public void box() {
        System.out.println(name + " boxing;");
    }
    public void setName(String name) {
        this.name = name;
    }
}


披萨子类 GreekPizza / PepperPizza / ChinesePizza

印度披萨

package tanchishell.SJMS.factory;

public class GreekPizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("准备希腊披萨的原材料");
    }
}

胡椒披萨

package tanchishell.SJMS.factory;

public class PepperPizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("准备胡椒披萨的原材料");
    }
}

中国披萨

package tanchishell.SJMS.factory;

public class ChinesePizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("准备中国披萨的原材料");
    }
}

订购披萨 OrderPizza

package tanchishell.SJMS.factory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class OrderPizza{

    //定义一个简单工厂对象
//    SimpleFactory simpleFactory = new SimpleFactory(); //如果OrderPizza 和 工厂类同生共死就是组合关系
    SimpleFactory simpleFactory;
    Pizza pizza = null;

    //构造器
    public OrderPizza(SimpleFactory simpleFactory) {
        setFactory(simpleFactory);
    }
    public void setFactory(SimpleFactory simpleFactory) {
        String orderType = ""; //用户输入的,先定义一个空串提供下面使用
        this.simpleFactory = simpleFactory; //设置简单工厂对象
        do {
            orderType = getType();
            //可以在这里更换工厂方法
            pizza = this.simpleFactory.createPizza(orderType);

            //输出 pizza
            if(pizza != null) { //订购成功
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            } else {
                System.out.println(" 订购披萨失败 ");
                break;
            }
        }while(true);
    }



    //获取用户需要披萨的类型
    private String getType() {
        try {
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza 类型:");
            String str = strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

}

披萨简单工厂 SimpleFactory

package tanchishell.SJMS.factory;

/**
 * 添加新品种的 披萨 只需要添加一个Pizza子类和在工厂类中做一个判断
 */

public class SimpleFactory {

    //更加 orderType 返回对应的 Pizza 对象
    public Pizza createPizza(String orderType) {
        Pizza pizza = null;
        System.out.println("使用简单工厂模式");
        if (orderType.equals("greek")) {
            pizza = new GreekPizza();
            pizza.setName(" 希腊披萨 ");
        } else if (orderType.equals("chinese")) {
            pizza = new ChinesePizza();
            pizza.setName(" 中国披萨 ");
        } else if (orderType.equals("pepper")) {
            pizza = new PepperPizza();
            pizza.setName("胡椒披萨");
        }else if (orderType.equals("usa")){  //新增美国披萨
            pizza = new USAPizza();
            pizza.setName("我是美国披萨");
        }
        return pizza;
    }

    //简单工厂模式 也叫 静态工厂模
    public static Pizza createPizza2(String orderType) {
        Pizza pizza = null;
        System.out.println("使用简单工厂模式 2");
        if (orderType.equals("greek")) {
            pizza = new GreekPizza();
            pizza.setName(" 希腊披萨 ");
        } else if (orderType.equals("chinese")) {
            pizza = new ChinesePizza();
            pizza.setName(" 中国披萨 ");
        } else if (orderType.equals("pepper")) {
            pizza = new PepperPizza();
            pizza.setName("胡椒披萨");
        }
        return pizza;
    }
}


客户端订购披萨 PizzaStore

package tanchishell.SJMS.factory;

//订购Pizza的客户端
public  class PizzaStore {
    public static void main(String[] args) {
//        new OrderPizza();
        //获取订单,传入一个工厂
        new OrderPizza(new SimpleFactory());
        System.out.println("退出程序");
    }

}

添加披萨子类 USAPizza 美国披萨

package tanchishell.SJMS.factory;

public class USAPizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("准备制作美国披萨");
    }
}

在这里插入图片描述

运行结果

在这里插入图片描述

二、工厂方法模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码

披萨父类 Pizza

package tanchishell.SJMS.methedfactory;

//抽象类 Pizza 后续的所有 披萨都继承该类
public abstract class Pizza {

    protected String name;

    //由于不同的披萨有着不同的原材料所有 准备原材料的方法是抽象的需要子类自己去实现
    public abstract void prepare();

    //以下流程是各种披萨共有的,子类继承后自动实现
    public void bake() {
        System.out.println(name + " baking;");
    }
    public void cut() {
        System.out.println(name + " cutting;");
    }
    public void box() {
        System.out.println(name + " boxing;");
    }
    public void setName(String name) {
        this.name = name;
    }
}

北京奶酪披萨 BJCheesePizza

public class BJCheesePizza extends Pizza{
    @Override
    public void prepare() {
        setName("北京奶酪披萨");
        System.out.println("准备北京制作奶酪披萨");
    }
}

北京胡椒披萨 BJPepperPizza

public class BJPepperPizza extends Pizza {
    @Override
    public void prepare() {
        setName("北京胡椒披萨");
        System.out.println("准备北京胡椒披萨的原材料");
    }
}

伦敦奶酪披萨 LDCheesePizza

public class LDCheesePizza extends Pizza{
    @Override
    public void prepare() {
        setName("伦敦奶酪披萨");
        System.out.println("准备伦敦制作奶酪披萨");
    }
}

伦敦胡椒披萨 LDPepperPizza

public class LDPepperPizza extends Pizza {
    @Override
    public void prepare() {
        setName("伦敦胡椒披萨");
        System.out.println("准备伦敦胡椒披萨的原材料");
    }
}

抽象订购披萨 OrderPizza (充当工厂角色)

package tanchishell.SJMS.methedfactory;

import tanchishell.SJMS.factory.SimpleFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public abstract class OrderPizza {


    //定义一个抽象方法,createPizza , 让各个工厂子类自己实现
    abstract Pizza createPizza(String orderType);

    // 构造器
    public OrderPizza() {
        Pizza pizza = null;
        String orderType; // 订购披萨的类型
        do {
            orderType = getType();
            pizza = createPizza(orderType); //抽象方法,由工厂子类完成
            //输出 pizza 制作过程
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        } while (true);
    }



    //获取用户需要披萨的类型
    private String getType() {
        try {
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza 类型: ---- pepper(胡椒口味) -----cheese(奶酪口味)");
            String str = strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

}

订购披萨子类 BJOrderPizza / LDOrderPizza

BJOrderPizza

package tanchishell.SJMS.methedfactory;

public class BJOrderPizza extends OrderPizza{
    @Override
    Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if(orderType.equals("cheese")) {
            pizza = new BJCheesePizza();
        } else if (orderType.equals("pepper")) {
            pizza = new BJPepperPizza();
        }
        /**
         * 需要添加北京口味的披萨只需要设计一个披萨子类 并在 这里加一个判断
         */
        return pizza;
    }
}

LDOrderPizza

package tanchishell.SJMS.methedfactory;

public class LDOrderPizza extends OrderPizza{
    @Override
    Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if(orderType.equals("cheese")) {
            pizza = new LDCheesePizza();
        } else if (orderType.equals("pepper")) {
            pizza = new LDPepperPizza();
        }
// TODO Auto-generated method stub
        return pizza;
    }
}

客户端订购披萨

package tanchishell.SJMS.methedfactory;

import java.util.Scanner;

public class PizzaStore {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请选择您的口味---目前支持 1,北京口味 ----2,伦敦口味");
        int i = scanner.nextInt();

        if(i == 1){
            new BJOrderPizza();
        }
        if(i == 2){
            new LDOrderPizza();
        }
    }
}

运行结果

在这里插入图片描述

添加披萨口味

新增子类实现

在这里插入图片描述

在对应的 Order 实现类进行判断

在这里插入图片描述

测试

在这里插入图片描述

在这里插入图片描述

三、抽象工厂模式

在这里插入图片描述

在这里插入图片描述

抽象工厂模式是对简单工厂和工厂方法的一个整合

代码示例

pizza 代码和 工厂方法模式一致,就不写了

抽象工厂 AbsFactory 接口

public interface AbsFactory {
    //让下面的工厂子类来 具体实现
    Pizza createPizza(String orderType);
}

北京披萨工厂 BJFactory 实现 AbsFactory 接口

package tanchishell.SJMS.absFactory;

public class BJFactory implements AbsFactory{
    @Override
    public Pizza createPizza(String orderType) {
        System.out.println("~使用的是抽象工厂模式~");

        Pizza pizza = null;
        if(orderType.equals("cheese")) {
            pizza = new BJCheesePizza();
        } else if (orderType.equals("pepper")){
            pizza = new BJPepperPizza();
        }
        /**
         * 添加披萨子类和判断就能完成披萨口味的添加
         */
        return pizza;
    }
}

伦敦披萨工厂 LDFactory 实现 AbsFactory 接口

package tanchishell.SJMS.absFactory;

public class LDFactory implements AbsFactory{
    @Override
    public Pizza createPizza(String orderType) {
        System.out.println("~使用的是抽象工厂模式~");
        Pizza pizza = null;
        if (orderType.equals("cheese")) {
            pizza = new LDCheesePizza();
        } else if (orderType.equals("pepper")) {
            pizza = new LDPepperPizza();
        }
        return pizza;
    }
}

披萨订购 OrderPizza 聚合 AbsFactory 接口

package tanchishell.SJMS.absFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class OrderPizza {
    AbsFactory factory;

    // 构造器
    public OrderPizza(AbsFactory factory) {
        setFactory(factory);
    }

    private void setFactory(AbsFactory factory) {
        Pizza pizza = null;
        String orderType = ""; // 用户输入
        this.factory = factory;
        do {
            orderType = getType();
// factory 可能是北京的工厂子类,也可能是伦敦的工厂子类
            pizza = factory.createPizza(orderType);
            if (pizza != null) { // 订购 ok
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            } else {
                System.out.println("订购失败");
                break;
            }
        } while (true);
    }

    // 写一个方法,可以获取客户希望订购的披萨种类
    private String getType() {
        try {
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza 类型: ---- pepper(胡椒口味) -----cheese(奶酪口味)");
            String str = strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
}


客户端订购披萨

package tanchishell.SJMS.absFactory;

import java.util.Scanner;

public class PizzaStore {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请选择您的口味---目前支持 1,北京口味 ----2,伦敦口味");
        int i = scanner.nextInt();

        if(i == 1){
            new OrderPizza(new BJFactory());
        }
        if(i == 2){
            new OrderPizza(new LDFactory());
        }
    }
}

运行结果

在这里插入图片描述

JDKの工厂模式: Calendar日历类

在这里插入图片描述

        Calendar cal = Calendar.getInstance();
// 注意月份下标从0开始,所以取月份要+1
        System.out.println("年:" + cal.get(Calendar.YEAR));
        System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
        System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
        System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
        System.out.println("分:" + cal.get(Calendar.MINUTE));
        System.out.println("秒:" + cal.get(Calendar.SECOND));

进入Calendar cal = Calendar.getInstance();

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工厂模式小结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8 更换骨干网络之 MobileNetV3

论文地址:https://arxiv.org/abs/1905.02244 代码地址:https://github.com/xiaolai-sqlai/mobilenetv3 我们展示了基于互补搜索技术和新颖架构设计相结合的下一代 MobileNets。MobileNetV3通过结合硬件感知网络架构搜索(NAS)和 NetAdapt算法对移动设计如何协同工作,利用互…

BswM模块之Ecu State Handling

文章目录 前言一、ESH是什么?二、基于BswM管理的ECU状态切换流程1.ECU启动2.ECU关闭 总结 前言 BswM – 基础软件模式管理模块, 它的职责是基于简单规则的BSW模块仲裁来自应用层sw - c或其他模块的模式请求,并根据仲裁结果进行相应的操作。 …

QT QPainter 绘制基本图形元件简介

1.基本图形元件 QPainter 提供了很多绘制基本图形的功能,包括点、直线、椭圆、矩形、曲线等,由这些基本的图形可以构成复杂的图形。QPainter 中提供的绘制基本图元的函数如下表所示。每个函数基本上都有多种参数形式,这里只列出函数名&#x…

Elastic Common Schema 和 OpenTelemetry — 无需供应商锁定即可获得更好的可观察性和安全性的途径

作者:Elastic 可观察性和安全团队 在 KubeCon Europe 上,宣布 Elastic Common Schema (ECS) 已被 OpenTelemetry (OTel) 接受作为对该项目的贡献。 目标是将 ECS 和 OpenTelemetry 的语义约定 (SemConv) 融合到一个由 OpenTelemetry 维护的开放模式中。 …

LearnOpenGL-模型加载

1.配置Assimp库。 下载Assimp,解压后得到 assimp-master 文件。在文件中新建一个 build 文件。使用 Cmake 生成工程文件保存在 build 中,从这里下载CMake,下载最新的即可。 打开CMake,选择需要源文件目录和目标目录。修改成适配…

机器学习平台、自研DPU、资源并池,火山引擎发布多云、AI基础设施与增长法宝

1、每十家大模型企业,七家在火山引擎云上。 2、火山引擎大模型训练云平台,支持万卡训练,集群性能提升3倍 3、火山引擎新一代自研DPU,实现计算、存储、网络的全组件卸载,释放更多资源给业务负载。 4、火山引擎与字节国内…

数据库管理软件dbeaver-ce 下载安装并离线配置

文章目录 前言数据库管理软件dbeaver-ce 下载安装并离线配置1. 概述2. 下载3. 安装4. 离线配置驱动jar包5. 链接mysql 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天…

谷歌aab包手机怎么安装教程

一、概述 bundletool是一种底层工具,可供 Android Studio、Android Gradle 插件和 Google Play 用于构建 Android App Bundle 文件并将 app bundle 转换为部署到设备的各种 APK。您也可以将 bundletool作为一种命令行工具,用于自行构建 app bundle 和重新…

【笔试强训编程题】Day2.(排序子序列 100448)和(倒置字符串 69389)

文章目录 前言 一、排序子序列 100448 题目描述 代码实现 二、倒置字符串 69389 题目描述 代码实现 总结 前言 今天让我们来练习两道经典的编程题!!!! 一、排序子序列 100448 题目描述:牛牛定义排序子序列为…

平台资金提现解决方案之实现支付宝单笔转账到银行卡功能

大家好,我是小悟 使用场景 不管是做APP、电脑网站、手机网站还是小程序,为了推广基本上都离不开用户分佣的场景。 换句话说就是在其平台内为每个用户设置“电子钱包”功能,而电子钱包在平台那里只是一串数字,这就需要平台为用户…

详解 ES6中 Promise 构造函数的使用

文章目录 前言什么是 Promise?Promise 的几种状态拆分细解 PromisePromise all()方法then()方法 返回一个新的 Promise 时的状态由什么决定?总结 前言 Promise 是ES6 新增的一个异步调用解决方案,它的出现是为了解决异…

Elasticsearch的调优思路

环境:centos7、elasticsearch-5.6.4 1、性能调优 1.1、Linux参数调优 1.1.1、关闭交换分区 目的是防止内存置换降低性能,将 /etc/fstab 文件中包含 swap 的行注释掉。 #执行命令:注释相关 swap的行 sed -i /swap/s/^/#/ /etc/fstab#将 /etc/f…

彻底弄清FreeRTOS中的事件组(Event Groups)

​之前已经学过两个任务之间可以利用信号量、队列来通信,任务可以利用这两个机制等待某一个事件发生,但是假如需要等待多个事件发生呢?这就需要用到事件组了。 事件组可以让任务进入阻塞态,等待一个或多个事件的组合发生。当事件…

根据 cadence 设计图学习硬件知识 day02 了解飞腾 X100芯片

1. 飞腾芯片 X100的介绍 飞腾套片X100是一款微处理器的配套芯片,主要功能包括图形图像处理和接口扩展两类。在图形图像处理方面,集成了图形处理加速GPU、视频解码VPU、显示控制接口DisplayPort以及显存控制器;在接口扩展方面,支持…

【矩形面积】

题目来源:https://leetcode.cn/problems/rectangle-area/ 目录 矩形面积 矩形面积 题目介绍 给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示&#xf…

数字化转型危与机,20年老厂的升级之路

“投资大、周期长、见效慢”,是每一家企业在考虑数字化战略时,都会纠结的问题。 打江山容易,守江山难 企业在快速扩张的过程中,往往可以不需要过多的考虑细节的问题,跑马圈地的打法会更加有效。 但是市场占有量开始饱…

JS Array数组常用方法

会改变原数组的方法 1、array.push(需要在末尾添加的数据)【给数组末尾添加一个元素】 2、array.unshift(需要在首位添加的数据)【给数组首位添加一个元素】 3、array.pop()【从数组末尾删除元素,不需要传参】 4、array.shift()【从数组首位开始删除元素,不需要传参】 5、arra…

数据处理方法(LFSR)

一、线性反馈移位寄存器(LFSR)编码概述 线性反馈移位寄存器(LFSR):通常由移位寄存器和异或门逻辑组成。其主要应用在: 伪随机数,伪噪声序列,计数器,BIST,数据…

树脂吸附含钴废水的实际案例

三元聚合物-锂电池是指正极材料使用锂、镍、钴、锰三元正极材料的锂电池,锂离子电池的正极材料有很多种,主要有钴酸锂、锰酸锂、镍酸锂、三元材料、磷酸铁锂等。用三元材料作为正极材料的动力锂电池,近年来凭借其容量高、循环稳定性&#xff…

Java笔记一(黑马)

目录 一.标准的javaBean二.反射1.获取class对象的三种方式2.反射获取构造方法3.反射获取成员变量4.反射获取成员方法 三.网络编程TCP Serve/ClientNIO框架Netty 一.标准的javaBean package com.itheima.domain;public class Student {//1.成员变量私有化//2.空参,带…