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));
    }
}
相关推荐
庞轩px2 小时前
第七篇:Spring扩展点——如何优雅地介入Bean的创建流程
java·后端·spring·bean·aware·扩展点
tongluowan0073 小时前
一个请求在Spring MVC 中是怎么流转的
java·spring·mvc
夜郎king4 小时前
Spring AI 对接大模型开发易错点总结与实战解决办法
java·人工智能·spring
oradh4 小时前
Oracle数据库中的Java概述
java·数据库·oracle·sql基础·oracle数据库java概述
组合缺一4 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring·ai·langchain·llm·solon
c++之路5 小时前
适配器模式(Adapter Pattern)
java·算法·适配器模式
吴声子夜歌5 小时前
Java——接口的细节
java·开发语言·算法
阿拉金alakin5 小时前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on5 小时前
Java—方 法
java·开发语言·算法·青少年编程
雨落在了我的手上5 小时前
如何学习java?
java·开发语言·学习