学习中设计模式的总结
首先要了解什么是设计模式呢?
设计模式:可以简单的理解为两个字“经验”,就是码农们在各种需求中间,总结出来的一种最优的解法称之为设计模式;
1,单例模式🎄
作用: 当系统中要求某个类只有一个实例的时候可以使用单例模式
生活中的应用: 比如windows中的任务管理器,只能打开一个窗口
写法:
- 构造器私有化
- 定义一个私有的类变量记住类的一个对象
- 定义一个类方法,返回对象
根据对象创建的时机不同,单例模式又分为两种:
先创建的称之为饿汉式,后创建的称之为 懒汉式
1,单例模式之饿汉式
因为比较饥饿,所以在还没有调用方法的时候就已经把对象创建好了,具体实现代码如下:
class Food {
// 1.构造器私有化,目的是不让子类直接的new
private Food() {
}
// 2.定义一个私有的类变量,来存储对象的引用
private static Food food = new Food();
// 3,定义一个类方法,去返回创建好的对象
public static Food getFood() {
return food;
}
}
2,单例模式之懒汉式
顾名思义就是什么时候用,什么时候再创建好。实现代码如下:
class Food {
// 1.构造器私有化,目的是不让子类直接的new
private Food() {
}
// 2.定义一个私有的类变量,来存储对象的引用
private static Food food;
// 3,定义一个类方法,去返回创建好的对象
public static Food getFood() {
// 判断如果food没有创建,这个时候再创建
if (food == null) {
food = new Food();
}
return food;
}
}
两者对比,看似只是创建对象先后的问题,但是在安全上和性能上却有一些差异
饿汉式中的对象,是在类加载的时候创建的,但是后面如果不用,那么就会导致资源的浪费。但是一般不会不用,所以饿汉式是较为常用的方式
而懒汉式,多了if语句,这样对比饿汉式,就会多了一步比较的步骤,这样在性能上就有所损耗。但是主要的原因,还是在多线程的时候,如果多个线程,同时进入到if语句中,这个时候就会创建多个对象,从而不在是单例。
2,模板模式🎍
作用: 提高代码的复用性,减少冗余代码
应用场景: 在子类实现父类相同的功能的时候,由于业务的大同小异,使得子类中的代码有很多相同的部分,但是在代码中又需要穿插着子类自己的代码。
这个时候就可以把父类设计为抽象类,实现如下:
1,定义一个抽象类
2,在里面定义两个方法
* 一个是模板方法,用于把相同的代码放进去
* 一个是抽象方法,用于让子类具体实现内容
举个生活中的具体的案例。比如我们一天的工作,早晨大家都一样刷牙洗脸开始,晚上以泡脚结束。。。但是每个人一天的内容不同,是自己发挥的部分。那么实现的代码就可以这样写:
父类 OneDay:
abstract class OneDay {
// 大家都会做的方法
public final void EverythingInADay() {
System.out.println("元气满满的一天,开始洗漱啦~~~~");
work();
System.out.println("美好的一天结束了,泡个jio~~~");
}
public abstract void work();
}
子类:
class Me extends OneDay {
@Override
public void work() {
System.out.println("上午写几百行Bug");
System.out.println("中午吃个乾隆白菜");
System.out.println("下午再改改bug");
System.out.println("回家啦~~~~~");
}
}
测试类:
public class AbstractTest {
public static void main(String[] args) {
new Me().EverythingInADay();
}
}
控制台:
元气满满的一天,开始洗漱啦~~~~
上午写几百行Bug
中午吃个乾隆白菜
下午再改改bug
回家啦~~~~~
美好的一天结束了,泡个jio~~~