Java设计模式

Java设计模式

设计模式:程序员总结的并被广泛应用的代码套路

1、类的单例设计模式

采取一定的方法,保证整个软件系统中,对于某个类只能存在一个对象实例,并且该类只提供一个取得对象实例的方法。Runtime类就是用的是单例模式。

1.1、饿汉式

饿汉式: 类加载的时候,对象就被创建了。就算没有调用实例,实例对象也已经被创建了。可能存在资源浪费问题。

步骤如下
  1. 构造器私有化(添加private修饰即可):防止直接new
  2. 类的内部创建对象
  3. 向外暴露pubic static 类名 getInstance方法,用来获取实例
java 复制代码
package com.zhw.static_;

class GirlFriend {
    private String name;
    // 只会加载一次实例对象
    private static GirlFriend gf = new GirlFriend("xx?.x");
    public GirlFriend(String name) {
        this.name = name;
    }
    // 向外暴露实例对象
    public static GirlFriend getInstance() {
        return gf;
    }
    // 执行当前类实例对象的打印时,调用toString
    @Override
    public String toString() {
        return name;
    }
}
public class ChildGame {
    public static void main(String[] args) {
        System.out.println(GirlFriend.getInstance());
    }
}

1.2、懒汉式

懒汉式: 只有调用获取实例时,才会创建对象实例。【当用户调用getInstance实例的时候,才会创建实例,访问其他静态属性,是不会创建实例的】。可能存在多线程安全问题在判断==null的时候。

java 复制代码
package com.zhw.static_;

class GirlFriend {
    private String name;
    // 只会加载一次实例对象
    private static GirlFriend gf;
    public GirlFriend(String name) {
        this.name = name;
    }
    // 向外暴露实例对象
    public static GirlFriend getInstance() {
        if(gf == null) {
            gf = new GirlFriend("xx?.x");
        }
        return gf;
    }
    // 执行当前类实例对象的打印时,调用toString
    @Override
    public String toString() {
        return name;
    }
}
public class ChildGame {
    public static void main(String[] args) {
        System.out.println(GirlFriend.getInstance());
    }
}

2、模版设计模式

模版设计模式: 将公共的代码抽取到父类,需要在子类实现不同逻辑的同一功能方法,在父类抽象成抽象方法。

java 复制代码
abstract public class Template {

    public abstract void job();

    // 抽取公共的方法
    public void calculateTime() {
        Long start = System.currentTimeMillis();
        job();  // 根据当前子类的实例对象,进行对象的动态绑定。
        Long end = System.currentTimeMillis();
        System.out.println("执行时间是;" + (end - start));
    }
}
相关推荐
春_18 分钟前
IP范围转IP掩码
java·服务器·网络·tcp/ip
kfepiza22 分钟前
HttpSessionAttributeListener 的用法笔记250417
java·spring boot·笔记·servlet·java-ee·tomcat
ademen36 分钟前
关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用
java·开发语言·kotlin
薯条不要番茄酱42 分钟前
【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(一)
java·前端·java-ee
大苏打seven44 分钟前
Java学习笔记(多线程):ConditionObject 源码分析
java·笔记·学习
苹果酱05671 小时前
redis系列--1.redis是什么
java·vue.js·spring boot·mysql·课程设计
卷不动的打工仔1 小时前
Ubuntu利用docker搭建Java相关环境问题记录
java·ubuntu·docker
百锦再1 小时前
Android Studio 中文字大小的单位详解
android·xml·java·ide·app·android studio
Light602 小时前
Python依赖注入完全指南:高效解耦、技术深析与实践落地
python·设计模式·单元测试·fastapi·依赖注入·解耦
一只叫煤球的猫2 小时前
分布式-跨服务事务一致性的常见解决方案
java·分布式·后端