常用设计模式
前言
一起努力,了解并学习及应用–设计模式!
一、设计模式是什么?
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
二、第一章 单例模式
1.饿汉式-使用静态代码块初始化该类
代码如下(示例):
class Car {
private final static Car car;
//利用类加载时静态代码块仅执行一次
//初始化car并赋值
static {
car = new Car();
}
// 将构造方法私有化,避免new
private Car() {
}
//向外暴露获取该唯一实例的方法
public static Car getCar() {
return car;
}
}
2.饿汉式-使用final修饰的成员变量
代码如下(示例):
class Phone {
//利用final修饰的静态成员变量初始化后,不能再修改的特性
private final static Phone phone = new Phone();
//方志敏使用者new对象
private Phone() {
}
//向外暴露唯一获取该类实例的方法
public static Phone getPhone() {
return phone;
}
}
输出如下
class Person {
public static void main(String[] args) {
Car car = Car.getCar();
Car car1 = Car.getCar();
System.out.println((car == car1) + "::" + car + "::" + car1);
System.out.println(
"----"
);
Phone phone = Phone.getPhone();
Phone phone1 = Phone.getPhone();
System.out.println((phone == phone1) + "::" + phone + "::" + phone1);
}
}
true::Car@23fc625e::Car@23fc625e
----
true::Phone@3f99bd52::Phone@3f99bd52
总结
主要是利用类加载时的特性,如下:
开始 --> 父类的静态代码块 --> 子类的静态代码块 --> 父类的普通代码块 --> 父类的构造方法
--> 子类的普通代码块 --> 子类的构造方法 --> 结束
###注意事项
静态代码块(也就是被关键字static修饰的代码块)只在程序初次运行时执行一次,也就是说,
无论你实例化(new)多少个对象,静态代码块都只执行一次;其原因就在于静态代码块只是在
类被加载进内存时执行,而类加载到内存中只需执行一次,所以静态代码块也就只执行一次.