java-享元模式
阿新 • • 發佈:2019-02-12
享元模式是設計模式中少數幾個以提高系統性能為目的的設計模式之一。它的核心思想是:如果一個系統中存多個相同的物件,那麼只需要共享一份物件的拷貝,而不必為每一次使用都建立新的物件。在享元模式中,由於需要構造和維護這些可以共享的物件,因此,常常會出現一個工廠類,用於為何和建立物件。
享元模式比較類似於單例模式,享元模式的主要角色也由享元工廠、抽象享元、具體享元和主函式幾部分組成。而核心則為享元工廠。
舉個例子:呼叫第三方介面基本都需要一些token、和簽名等,而這些簽名因為需要維護的關係,我們可能需要把介面的token或者簽名祕鑰動態的維護在資料庫中方便讀取來呼叫第三方的介面。但是介面的呼叫非常的頻繁,頻繁的讀取資料庫顯然不是一個好的辦法。這個時候我們就可以利用享元模式了,在享元工廠中動態的去維護這些資料,然後實時的更新到系統的每一個地方。
抽象享元:
public interface Token { void getToken(); }
具體享元:
public class TokenImpl implements Token { private String token; private String tokenId; public TokenImpl(String tokenId, token){ this.setTokenId(tokenId);
this.setToken(token);}
public String getToken() {
return token;
}
public void setToken(String token) {
token = token; }
public String getTokenId() {
return tokenId;
}
public void setTokenId(String tokenId) {
tokenId = tokenId;
}
@Override
public void getToken() {
System.out.println("獲取到tokenId"+ tokenId+" token:"+token);
}
}
享元工廠:
工廠中用於維護資料,實時更新、計算token,提供給系統中需要呼叫第三方介面的地方,這裡的工廠類中省略了很多和資料庫的互動,但是不影響整體的概念理解。
public class TokenFactory { private static final Map<String,TokenImpl> tokens = new HashMap<String,TokenImpl>(); public static TiYuGuan getToken(String tokenId){ TokenImpl tokenImpl = tokens.get(tokenId); if(tokenImpl == null){
synchronized(tokens){
tokenImpl = new TokenImpl(tokenId, "讀取資料庫獲取。。。。。"); tokens.put(tokenId, tokenImpl);
}
} return tokenImpl; }}
總結:
享元模式的理解可以參考java中的 String。
”abc“,”ab“, ”a“,這些都是放置在常量池中,
String a = "abc", String b = “abc”, a和b是相等的。因為a和b引用了常量池的同一個記憶體地址。詳情可以參考我的文章:http://blog.csdn.net/sheng94458/article/details/77993429