11.1java-设计模式

设计模式

前人总结出来的一套解决问题的方案

模板设计模式

将抽象类整体,看做为是一个模板,而模板中不能决定的东西,就定义为抽象方法

-让使用模板的人,来丰富方法

案例解析:

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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值