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));
    }
}
相关推荐
S***26754 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)5 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL5 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
V***u4535 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿5 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9196 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08296 小时前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡6 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
vx_dmxq2116 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
5***g2986 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端