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;
}
}
运行结果:

会发现创建的两个对象是相同的,这也就印证了唯一性的特点
-
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: 静态成员在类加载时就被加载进内存中了,静态对象是静态变量被实例化的一个对象,拥有静态属性。同时也具有对象的特点,可以调用对象自身的方法
建造者模式
作用:将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示
形象化例子:装配主机时,一个主机由于包含多个组件,是一个复杂对象。构建表示将组件组装为主机的过程,不同的表示为假如组件更换了拼配,依旧可以用相同的构建过程组装主机

浙公网安备 33010602011771号