Java学习路线-9:多例设计与枚举类

简介: Java学习路线-9:多例设计与枚举类

第25 章 : 单例设计模式

110 单例设计

单例设计模式:只允许提供一个实例对象

- 饿汉式:系统加载就实例化

- 懒汉式:第一次使用的时候实例化

多例设计模式

单例模式特点:

构造方法私有化,内部提供static方法获取实例化对象

饿汉式单例模式

class Singleton{
    private static Singleton singleton = new  Singleton();
    // 构造函数私有化
    private Singleton(){};
    public static Singleton getInstance(){
        return singleton ;
    }
}
class Demo{
    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
    }
}

懒汉式单例模式

class Singleton{
    private static Singleton singleton ;
    // 构造函数私有化
    private Singleton(){};
    public static Singleton getInstance(){
        // 第一次使用实例化
        if (singleton == null){
           singleton = new  Singleton();
        }
        return singleton ;
    }
}

111 多例设计

class Color{
    private String title;
    private static final Color RED = new Color("红色");
    private static final Color GREEN = new Color("绿色");
    private static final Color BLUE = new Color("蓝色");
    private Color(String title){
        this.title = title ;
    };
    public static Color getInstance(String color){
        switch(color){
            case "red" : return RED;
            case "green" : return GREEN;
            case "blue" : return BLUE;
            default: return null;
        }
    }
    @Override
    public String toString(){
        return this.title;
    }
}
class Demo{
    public static void main(String[] args) {
        Color red = Color.getInstance("red") ;
        System.out.println(red);
    }
}

单例和多例都会提供一个静态获取实例化的方法

第26 章 : 枚举

112 定义枚举类

JDK >= 1.5

枚举主要用于定义有限个数对象的一种结构(多例设计)

枚举可以在程序编译时判断实例化对象是否存在

enum Color{
    RED,
    GREEN,
    BLUE
}
class Demo{
    public static void main(String[] args) {
        for(Color color : Color.values()){
            System.out.println(color);
        }
        // RED GREEN BLUE
    }
}

switch中对枚举类判断

enum Color{
    RED,
    GREEN,
    BLUE
}
class Demo{
    public static void main(String[] args) {
        Color color = Color.RED ;
        switch(color){
            case RED :
                System.out.println("红色");
                break;
            case GREEN :
                System.out.println("绿色");
                break;
            case BLUE :
                System.out.println("蓝色");
                break;
            default :
                System.out.println("default");
        }
        // 红色
    }
}

113 Enum类

枚举本质是一个类

枚举中每一个对象序号都是根据枚举对象的定义顺序来决定的

enum Color{
    RED,
    GREEN,
    BLUE
}
class Demo{
    public static void main(String[] args) {
        for(Color color : Color.values()){
            System.out.println(color.ordinal() + " - " + color.name());
        }
        /**
        0 - RED
        1 - GREEN
        2 - BLUE
        */
    }
}

enum和Enum区别

enum 是JDK 1.5之后提供的关键字,定义枚举类

Enum 是一个抽象类,关键字enum定义的类默认继承此类

114 定义枚举结构

枚举类本身属于多例设计模式

在枚举类中定义其他结构

// 枚举类
enum Color{
    // 枚举对象要写在首行
    RED("红色"), GREEN("绿色"), BLUE("蓝色") ;
    // 定义属性
    private String title ;
    private Color(String  title){
        this.title = title ;
    }
    @Override
    public String toString(){
        return this.title ;
    }
}
class Demo{
    public static void main(String[] args) {
        for(Color color : Color.values()){
            System.out.println(color.ordinal() + " - " + color.name() + " - " + color);
        }
        /**
       0 - RED - 红色
        1 - GREEN - 绿色
        2 - BLUE - 蓝色
        */
    }
}

枚举类中可以实现接口继承

interface Imessage{
    public String getMessage();
}
enum Color implements Imessage{
    RED("红色"), GREEN("绿色"), BLUE("蓝色") ;
    private String title ;
    private Color(String  title){
        this.title = title ;
    }
    @Override
    public String toString(){
        return this.title ;
    }
    public String getMessage(){
        return this.title ;
    }
}
class Demo{
    public static void main(String[] args) {
        Imessage message = Color.RED ;
        System.out.println(message.getMessage());
        // 红色
    }
}

枚举类可以直接定义抽象方法,

并且要求每一个枚举对象都要独立覆写此抽象方法

enum Color{
    RED("红色"){
        public String getMessage(){
            return this.toString();
        }
    }, 
    GREEN("绿色"){
        public String getMessage(){
            return this.toString();
        }
    }, 
    BLUE("蓝色"){
        public String getMessage(){
            return this.toString();
        }
    } ;
    private String title ;
    private Color(String  title){
        this.title = title ;
    }
    @Override
    public String toString(){
        return this.title ;
    }
    public abstract String getMessage() ;
}
class Demo{
    public static void main(String[] args) {        
        System.out.println(Color.RED.getMessage());
        // 红色
    }
}

枚举类不建议写太多内容

115 枚举应用案例

enum Sex{
    MAN("男"), FEMALE("女") ;
    private String title;
    private Sex(String title){
        this.title = title ;
    }
    @Override
    public String toString(){
        return this.title ;
    }
}
class Person{
    private String name ;
    private int age ;
    private Sex sex ;
    public Person(String name, int age, Sex sex){
        this.name = name ;
        this.age = age ;
        this.sex = sex ;
    }
    @Override
    public String toString(){
        return "Person(" + this.name + " " + this.age + " " + this.sex + ")";
    }
}
class Demo{
    public static void main(String[] args) {
        Person person = new Person("张三", 23, Sex.MAN);
        System.out.println(person);
        // Person(张三 23 男)
    }
}


相关文章
|
3月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
483 3
|
3月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
720 1
|
4月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
670 3
|
6月前
|
前端开发 JavaScript Java
Java 学习路线规划及项目案例中的技术栈应用解析
内容包括:**Java 17核心特性**(如sealed class、record)与模块化开发;Spring Boot 3 + Spring Cloud微服务架构,涉及响应式编程(WebFlux)、多数据库持久化(JPA、R2DBC、MongoDB);云原生技术**如Docker、Kubernetes及CI/CD流程;性能优化(GraalVM Native Image、JVM调优);以及前后端分离开发(Vue 3、Spring Boot集成)。通过全栈电商平台项目实战,掌握从后端服务(用户、商品、订单)到前端应用(Vue 3、React Native)的全流程开发。
289 9
|
6月前
|
消息中间件 Java 微服务
2025 版 Java 学习路线实战指南从入门到精通
《Java学习路线实战指南(2025版)》是一份全面的Java开发学习手册,涵盖基础环境搭建、核心语法与新特性、数据结构与算法、微服务架构、云原生技术栈、AI融合及项目实战。内容包括JDK安装配置、IntelliJ IDEA设置、Records类与模式匹配增强、LeetCode题解、Spring Cloud微服务开发、Kubernetes部署、OpenAI API调用等。结合在线商城系统案例,采用Vue 3、Spring Boot 3.5、MySQL、Elasticsearch等技术,提供从理论到实践的完整路径,助力开发者掌握2025年最新趋势与最佳实践。
530 4
|
3月前
|
SQL 算法 Java
零基础到精通的史上最强 Java 学习路线图推荐
史上最全Java学习路线图,涵盖基础语法、面向对象、数据结构与算法、多线程、JVM、Spring框架、数据库及项目实战,助你从零基础到精通Java开发,附完整代码与工具推荐。
278 3
零基础到精通的史上最强 Java 学习路线图推荐
|
3月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
350 2
|
3月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
573 3
|
4月前
|
Java 数据库连接 微服务
零基础自学 Java 全栈必备最全学习路线及知识清单方向指引
本文为零基础学习者提供完整的Java全栈学习路线,涵盖Java基础、进阶、框架、项目实战及拓展方向,助你系统掌握全栈开发技能,快速成长为优秀Java工程师。
577 6
|
4月前
|
算法 Java 测试技术
适合新手小白的史上最强 Java 学习路线图从基础到进阶全程指南
本Java学习路线图涵盖从基础语法、面向对象、集合框架到进阶编程、JVM原理、Spring Boot框架,再到数据库操作与实战项目开发,内容系统全面,适合零基础新手入门与进阶提升,助力掌握Java全栈开发技能。
459 4