一:设计模基本介绍
- 静态方法和属性的几点经典使用
- 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索
三:单例设计模式应用举例
- 单例设计模式
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
1:饿汉式
步骤如下:
- 构造器私有化 -> 防止直接new
- 类的内部直接创建对象(static)
向外暴露一个静态的公共方法 ```java public class Modern {
public static void main(String[] args) {
//使用girl对象接收,如果没有需要也可以不接收直接输出
Girl girl = Girl.getInstance();
System.out.println(girl);
System.out.println(Girl.getInstance());
System.out.println(Girl.n1);//等价于上面两行
//用这个静态属性时会导致girl这个对象被加载
//所以静态属性的初始化是会被执行的,所以个对象呢就有了
} } class Girl{ private String name; public static int n1 =100; //對象,通常是重量級的對象, 餓漢式可能造成創建了對象,但是沒有使用. //为了能够在静态方法中,返回 gf对象,需要将其修饰为 static private static Girl girl = new Girl(“绘梨衣”); //饿汉式:在类加载的时候就创建了对象,即使没有使用这个对象
private Girl(String name) {
this.name = name;
}
public static Girl getInstance(){
return girl;
}
@Override public String toString() {
return "Girl{" +
"name='" + name + '\'' +
'}';
} }
<a name="RvenE"></a>
#### 2:懒汉式
- 仍然构造器私有化
- 定义一个static静态属性对象
- 提供一个public的static方法可以返回一个Car对象
- 懒汉式:只有当用户是哦给你getinstance时,才返回cat对象,只有再次调用时,会返回上次创建的对象,从而保证了单例
```java
public class Modern {
public static void main(String[] args) {
Cat cat = Cat.Getinstance();
System.out.println(cat);
}
}
class Cat{
private String name;
private static Cat cat;
private Cat(String name) {
this.name = name;
}
public static Cat Getinstance(){
if (cat ==null){
cat = new Cat("小可爱");
}
return cat;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
四:饿汉式和懒汉式对比
- 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(后面学习线程后,会完善一把)
- 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
- 在我们javaSE标准类中,java.lang.Runtime就是经典的单例模式。