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));
    }
}
相关推荐
Codebee18 分钟前
Ooder A2UI框架开源首发:构建企业级应用的全新选择
java·人工智能·全栈
程序员三明治1 小时前
【重学计网】TCP如何保证可靠传输?怎么保证可靠性?可靠传输的原理?
java·网络·后端·网络协议·tcp/ip·tcp·可靠传输
Nonoas8 小时前
动态代理:发布订阅的高级玩法
java·ide·intellij-idea
程序员-周李斌9 小时前
Java 死锁
java·开发语言·后端
阿闽ooo9 小时前
外观模式:从家庭电源控制看“简化接口“的设计智慧
c++·设计模式·外观模式
皮皮林5519 小时前
Prometheus+Grafana,打造强大的监控与可视化平台
java
JasmineWr10 小时前
CompletableFuture相关问题
java·开发语言
零雲10 小时前
java面试:知道java的反射机制吗
java·开发语言·面试
java1234_小锋10 小时前
Java进程占用的内存有哪些部分?
java
sxlishaobin10 小时前
Spring Bean生命周期详解
java·后端·spring