设计模式
前人总结出来的一套解决问题的方案
模板设计模式
将抽象类整体,看做为是一个模板,而模板中不能决定的东西,就定义为抽象方法
-让使用模板的人,来丰富方法
案例解析:
public abstract class Temp {
public final void write(){
System.out.println("开头");
body();
System.out.println("开头");
}
abstract void body();
}
public class TempTest {
public static void main(String[] args) {
Temp t = new Temp() {
@Override
void body() {
System.out.println("中间");
}
};
t.write();
}
}
**小结:**模板设计模式的优势,模板已经定义了通用结构,使用者只需要关心自己需要实现的功能即可
适配器设计模式
当我们需要使用一个接口,但是只需要接口中的一部分方法,就可以创建一个适配器类。
public class AdapterDemo {
// 创建子类,调用方法
public static void main(String[] args) {
鲁智深 l = new 鲁智深();
l.习武();
}
}
interface 和尚 {
void 打坐();
void 撞钟();
void 念经();
void 习武();
}
// 适配器类 并不是真正需要使用的类
// 加上abstract修饰是为了防止有人创建这个类的对象,调用这个类的方法
abstract class 和尚Adapter implements 和尚 {
@Override
public void 打坐() {
}
@Override
public void 撞钟() {
}
@Override
public void 念经() {
}
@Override
public void 习武() {
}
}
class 唐僧 extends 和尚Adapter {
@Override
public void 打坐() {
}
@Override
public void 撞钟() {
}
@Override
public void 念经() {
}
}
// 这里抽象类的子类,因为父类中的方法并不是抽象方法,所以可以挑选自己需要的方法来重写
class 鲁智深 extends 和尚Adapter {
// 重写我自己需要的方法
@Override
public void 习武() {
System.out.println("倒拔垂杨柳");
System.out.println("大闹野猪林");
System.out.println("拳打镇关西");
System.out.println("黑马学Java");
}
}
单例设计模式
确保一个类只有一个对象
饿汉式单例
(拿对象时,对象已经创建好了)写法:
1.把类的构造器私有
2.定义一个类变量记住类的一个对象
3.定义一个类方法,返回对象
public class A{
//定义一个类变量记住类的一个对象
private static A a = new A();
//私有构造器
private A(){
}
//定义一个类方法返回对象
public static A getObject(){
return a;
}
}
懒汉式单例
(拿对象时,才开始创建对象)写法:
1.把类的构造器私有
2.定义一个类变量用于存储对象
3.提供一个类方法,保证返回的是同一个对象
pubic class B(){
//定义一个类变量用于存储这个类的一个对象
private static B b;
//把类的构造器私有
private B(){
}
//定义一个类方法,这个方法要保证第一次调用时才创建一个对象,后面调用时都会返回这同一个对象
public static B getInstance(){
//双检索(只需要第一次创建的时候上锁,提高效率)
if(b == null){
synchronized(B.class){
if(b == null){
b = new B();
}
}
}
return b;
}
}