一、设计模式
即一些固定的套路。
设计模式与静态成员的使用有关。
二、单例?
单例就是一个实例对象,即采用一定的方法,使整个软件系统中,某一个类只能有一个实例对象,并且该类只提供一个得到该实例对象的方法。
二、饿汉式和懒汉式及区别
单例模式有两种方式:饿汉式和懒汉式。
1.饿汉式
实现方式:
私有化构造器 -》用户无法直接new对象了。
在类的内部创建对象
提供一个获取该对象的静态方法
(使用静态方法,为了能直接调用,不用创建对象。因此也经对象static化。)
如:
class girlFriend{
//(1)构造器(2)static对象(3)static的共有方法
private String name;
private girlFriend(String name) {
this.name = name;
}
private static girlFriend girl= new girlFriend("siphia");
public static girlFriend getGirl(){
return girl;
}
}
public class demo01 {
public static void main(String[] args) {
// girlFriend lusi = new girlFriend("lusi"); 会报错
girlFriend m=girlFriend.getGirl();
System.out.println(m);
girlFriend m1=girlFriend.getGirl();
System.out.println(m1);
/*这里虽然调用了两次获取对象的方法,但调用的都是同一个对象。
因为static修饰的对象只在类加载的时候创建一次。*/
}
}
2.懒汉式
实现方式:
1.私有化构造器
2.在类的内部声明static对象,不创建。
3.提供一个static的公有方法,在这个方法中创建对象。
class Cat{
private String name;
private static Cat cat;
/*
1.构造器仍私有化
2.定义static对象
3.提供一个公有的static方法,返回一个Cat对象。
*/
private Cat(String name) {
System.out.println("Cat的构造方法被调用");
this.name = name;
}
public static Cat getCat(){
if(cat == null){//加一个限制条件,用来只创建一个对象。
cat=new Cat("大灰狼");
}
return cat;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
public class SingleTon02 {
public static void main(String[] args) {
System.out.println(Cat.getCat());
}
}
饿汉式和懒汉式的区别
饿汉式:该对象会在类加载时就创建好,但在调用该类的其他属性和方法时,可能并没有用到该对象,就造成了资源的浪费。
懒汉式:存在线程安全问题,可能会导致创建多个对象。
(饿汉式在对象声明时就创建,懒汉式在返回对象的公共方法中创建。)