IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 多例设计模式和枚举enum -> 正文阅读

[人工智能]多例设计模式和枚举enum

作者:recommend-item-box type_blog clearfix

多例设计模式概述

多例模式,是一种常用的软件设计模式。通过多例模式可以保证系统中,应用该模式的类有固定数量的实例。多例类要自我创建并管理自己的实例,还要向外界提供获取本类实例的方法。

例如:

? 扑克牌程序,一个“扑克类”会创建固定的54个对象,不能多、也不能少。

? 麻将程序,一个“骰子类”会创建固定的2个对象,不能多、也不能少。

? 程序中需要用到“颜色的表示”,只能有三种颜色“红、绿、蓝”,一个“颜色类(Color)”应该只创建三个对象,来代 表这三个颜色。

多例模式的作用:使某个类,在程序运行期间,只能产生固定的几个对象,不能多、也不能少。

获取多个通用的对象

多例通用:多例是在类中创建多个私有的对象,通用是对象的属性值都一样。

import java.util.ArrayList;
import java.util.Random;

/*
    多例设计模式:获取多个通用的对象
    需求:
        只让程序产生3个Student对象,不能多,也不少
    实现步骤:
        1.私有空参数构造方法,不让用户直接创建对象
        2.定义一个私有的,静态的,最终的变量,值定义创建对象的总个数
        3.定一个私有的,静态的ArrayList集合对象,用于存储多个对象
        4.定义一个静态代码块(优先执行,只执行一次),创建3个对象,存储到集合中
        5.定义一个公共的静态方法,给用户随机在集合中取出一个对象返回
 */
public class Student {
    //1.私有空参数构造方法,不让用户直接创建对象
    private Student(){}

    //2.定义一个私有的,静态的,最终的变量,值定义创建对象的总个数
    private static final int MAX = 3;

    //3.定一个私有的,静态的ArrayList集合对象,用于存储多个对象
    private static ArrayList<Student> list = new ArrayList<>();

    //4.定义一个静态代码块(优先执行,只执行一次),创建3个对象,存储到集合中
    static {
        for (int i = 0; i < MAX; i++) {
            list.add(new Student());
        }
    }

    //5.定义一个公共的静态方法,给用户随机在集合中取出一个对象返回
    public static Student getInstance(){
        //定义一个Random对象
        Random r = new Random();
        //在集合索引范围内,产生一个随机数
        int index = r.nextInt(list.size());//[0,1,2]
        //通过随机索引,在集合中取出Student对象返回
        return list.get(index);
    }
}
public class Demo01Multiton {
    public static void main(String[] args) {
        //测试多例设计模式,无论获取多少次对象,只会产生固定的3个对象
        for (int i = 0; i < 20; i++) {
            Student s = Student.getInstance();
            System.out.println(s);
        }
    }
}

获取多个特定的对象

注意:特定对象修饰符必须是公开的、静态的、最终的,这样才能在别的类通过类名调出该对象。

多例特定:多例是在类中创建好多个自己的对象,特定是创建的对象属性都不一样。

/*
    多例设计模式:获取多个特定的的对象
        Sex类只产生两个Sex对象,一个代表男性别,一个代表女的性别
    实现步骤:
        1.私有数构造方法,不让用户直接创建对象
        2.定义两个固定的对象(公共,静态的,最终的)一个代表男性别,一个代表女的性别
        3.重写toString方法,打印对象的属性值(不重写打印地址值)
 */
public class Sex {
    //定义一个成员变量
    private String s;

    //1.私有数构造方法,不让用户直接创建对象
    private Sex(String s){
        this.s = s;
    }

    //2.定义两个固定的对象(公共,静态的,最终的)一个代表男性别,一个代表女的性别
    public static final Sex MAN = new Sex("男");
    public static final Sex WOMAN = new Sex("女");

    //3.重写toString方法,打印对象的属性值(不重写打印地址值)
    @Override
    public String toString() {
        return s;
    }
}
public class Student {
    private String name;
    private int age;
    //定义性别使用Sex类型
    private Sex sex;

    public Student() {
    }

    public Student(String name, int age, Sex sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
//省略getter和setter
}
public class Demo01Multiton {
    public static void main(String[] args) {
        //创建Student对象
        Student s = new Student();
        //给成员变量赋值
        s.setName("张三");
        s.setAge(18);
        //s.setSex("abc");//性别的类型是Sex,不能随便给性别赋值,只能在Sex类中选择常量赋值
        //s.setSex(Sex.MAN);
        s.setSex(Sex.WOMAN);
        System.out.println(s);
    }
}

枚举的定义

枚举:它就是"多例设计模式:获取多个特定的的对象"的一种简化写法,前面的Sex类换成枚举实现是这样的:

public enum Sex {
    //MAN,WOMAN //使用默认空参数构造方法创建两个对象
    MAN("男"),WOMAN("女");

    //定义成员变量
    private String s;

    //定义一个带参数构造方法
    private Sex(String s) {
        this.s = s;
    }

    //重写toSttring方法,返回对象中传递的字符串

    @Override
    public String toString() {
        return s;
    }
}
public class Demo01Enum {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("迪丽热巴");
        s1.setAge(18);
        s1.setSex(Sex.WOMAN);
        System.out.println(s1);

        Student s2 = new Student("马尔扎哈",28,Sex.MAN);
        System.out.println(s2);
    }
}

总结:

  • 枚举类在第一行罗列若干个枚举对象。(多例)
  • 第一行都是常量,存储的是枚举类的对象。
  • 枚举是不能在外部创建对象的,枚举的构造器默认是私有的。
  • 枚举通常用于做信息的标志和分类。
  • 枚举的是枚举类的对象,该对象是公开的静态的(保证在别的类中能通过类名调用)最终的(在别的地方调用也不能修改)
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:48:52  更:2021-09-11 18:49:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 17:47:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码