Java设计模式

设计模式

单例设计模式

饿汉式设计模式

  • 步骤
    • 将构造器私有化(不会new出新的对象,防止在类的外部创建,保证唯一性)
    • 类内部创建静态实例(静态保证唯一性,类加载时唯一创建)
    • 类内部提供一个公共的static方法返回实例
public class Main {
    public static void main(String[] args) {
        GirlFriend gf = GirlFriend.getInstance();
        System.out.println(gf);
        GirlFriend gf1 = GirlFriend.getInstance();
        System.out.println(gf1);
    }


}
class GirlFriend {
    private String name;
    //构造器私有化
    private GirlFriend(String name){
        this.name = name;
    }
    //类内部创建实例,且为静态类型,这样在加载类后就唯一创建了
    private static GirlFriend gf = new GirlFriend("女朋友");

    public static GirlFriend getInstance(){
        return gf;
    }

}

运行结果:
image

会发现创建的两个对象是相同的,这也就印证了唯一性的特点

  • Q:为什么称为饿汉式?

  • A:只要类被加载,静态的对象就会被创建,即使没有被使用,因此称为饿汉式

  • 特点:迫不及待

  • 缺点:有可能在类加载后只是用了一些静态属性,以后也没有使用创建的唯一对象,那么就会造成资源浪费

懒汉式

package lazyman;

public class test {
    public static void main(String[] args) {
        GirlFriend gf = GirlFriend.getInstance();
    }
}

class GirlFriend{
    private static String name;
    private static GirlFriend girlFriend;
    private GirlFriend(String name){
        this.name = name;
    }
    public String getname(){
        return name;
    }


    public static GirlFriend getInstance(){
	//并非类加载时就创建一个对象,而是在需要的时候再创建
        if (girlFriend == null) {
            girlFriend = new GirlFriend("小红");
        }
        return girlFriend;
    }
}
  • 懒汉式特点:直到需要时才创建唯一对象。
  • 缺点:饿汉式不存在线程安全问题,懒汉式存在线程安全问题

QA环节

Q:为什么静态对象可以调用非静态成员
A: 静态成员在类加载时就被加载进内存中了,静态对象是静态变量被实例化的一个对象,拥有静态属性。同时也具有对象的特点,可以调用对象自身的方法

建造者模式

作用:将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示
形象化例子:装配主机时,一个主机由于包含多个组件,是一个复杂对象。构建表示将组件组装为主机的过程,不同的表示为假如组件更换了拼配,依旧可以用相同的构建过程组装主机

posted @ 2023-02-18 18:05  pureayu  阅读(49)  评论(0)    收藏  举报