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方法