1、设计模式:
是一套被反复使用、多人知晓的、经过分类编目的、代码设计经验的总结
a、单例模式 ---> 只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有
一个实例而且该实例易于外界访问。如果在系统中某个类的对象只能存在一个,可以
用单例模式。
单例的实现:提供一个私有的构造方法;提供一个公开的静态方法返回类的对象。
好处:1、某些类创建比较频繁,对于大型的对象,是一笔很大的开销
2、省去了new的操作,降低了内存的使用频率,减轻GC压力
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话
系统就乱了;
分为:饿汉式和懒汉式
eg:饿汉式---线程安全
public class SingleTon {
// 私有静态的属性
private static SingleTon singleTon = new SingleTon();
// 私有的构造方法
private SingleTon() {
}
// 公开的静态方法,返回一个对象的实例
public static SingleTon getSingleTon() {
return singleTon;
}
}
懒汉式---线程不安全,多线程不能正常访问
public class SingleTon2 {
// 私有静态的属性
private static SingleTon2 singleTon2 = null;
// 私有的构造方法
private SingleTon2() {
}
// 公开的静态方法,返回一个对象的实例
public static SingleTon2 getSingleTon() {
if (singleTon2 == null) {
singleTon2 = new SingleTon2();
}
return singleTon2;
}
}
测试类
SingleTon singleTon=SingleTon.getSingleTon();
SingleTon2 singleTon2=SingleTon2.getSingleTon();
b、工厂模式---用工厂方法代替new操作的一种模式
eg:public class FruitFactory {
public Fruit make(String name) {
Fruit f = null;
if (name.equalsIgnoreCase("apple")) {
f = new Apple();
} else if (name.equalsIgnoreCase("Watermelon")) {
f = new Watermelon();
}
return f;
}
}
测试类:FruitFactory ff=new FruitFactory();
Apple apple= (Apple) ff.make("apple");
c、代理模式---代理主题来操作真实主题,真实主题执行具体的任务操作
2、Lambda表达式—通过表达式来代替功能接口
基本语法:(parameters)->expression 或者 (parameters)->{statements;}
可以用来遍历列表:
List<String> li=new ArrayList<>();
li.add("aaa");
li.add("bbb");
li.add("ccc");
li.add("ddd");
li.forEach((l)->{
if (l.endsWith("d")) {
System.out.println(l);
}else {
System.out.print(l+";");
}
});
3、对象比较器—用来给对象排序(加泛型)
a、comparable 接口
此接口强行给每一个类的对象进行整体排序。实现该接口 重写compareTo方法
b、comparator 接口
类已经定义好时,不用修改类,做一个比较器类实现该接口,重写compare方法