日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用反射建立一个用于生产短信对象的工厂方法

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用反射建立一个用于生产短信对象的工厂方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

????????先說說場景,一個系統,有幾個功能需要用到短信功能,比如登錄,忘記密碼,更改手機號,更改密碼等。那么需要一個接口,統一發送這些短信,從代碼重用和抽象的角度來講,需要實現一個短信積累,具有一些短信的具體功能,并且通過客戶端的參數可以自動選擇發送內容。

????? ? 我提供的內容是在原有基礎上更改過多次的,先貼出代碼,短信雞肋,他可以存放phone(手機號)和type(短信的具體類別,一般從客戶端傳來)

public abstract class AbstractMessage {private String phone;private String type;public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getType() {return type;}public void setType(String type) {this.type = type;}AbstractMessage(){super();}AbstractMessage(String type){setType(type);} }

然后是幾個短信子類,他們的特點就是構造方法里調用了setType方法,為什么要這樣調用后面再說

public class LoginMessage extends AbstractMessage{public static final String type = "3";LoginMessage(){setType(type);} } public class RegisterMessage extends AbstractMessage {public static final String type = "2";RegisterMessage(){setType(type);} } public class RememberPasswordMessage extends AbstractMessage {public static final String type = "1";public RememberPasswordMessage() {setType(type);} }

????????最后看看工廠方法類,這個類相當于一個工具類,他的create方法可以返回短信實體,從面向對象角度來講返回值類型為基礎類可以讓這個方法返回基類的各種子類。

????????看調用create前,static里的代碼就已經被執行完畢了,這個是static的特性,然后里面創建了一個map對象,對象存放了3個鍵值對,而key就是之前子類的type值,value是子類的class路徑,在調用create方法時,會通過客戶端傳來的type找到map里對應的實體類class路徑,然后通過反射創建對象,對象的類型是AbstractMessage的。需要注意的是子類的type必須和客戶端傳來的type值一樣,那樣才能正常創建對象,否則會出現異常。其實這個模式的思想就是把短信的創建權利交給客戶端,而且如果要新增類只要添加class和在工廠類的static塊里多一個put操作,和開閉原則相符,即對新增開放對修改關閉,不過實際開發中并不一定要死報著這個思想,要靈活運用。

public abstract class MessageFactory {private static Map<String,String>messageType;static {messageType = new HashMap<>();messageType.put(RememberPasswordMessage.type,"create.factory.customFactory.RememberPasswordMessage");messageType.put(LoginMessage.type, "create.factory.customFactory.LoginMessage");messageType.put(RegisterMessage.type,"create.factory.customFactory.RegisterMessage");}public static AbstractMessage createMessage(String type){String className = messageType.get(type);try {Class<?> aClass = Class.forName(className);return (AbstractMessage) aClass.newInstance();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}return null;} }

?

轉載于:https://my.oschina.net/wwwd/blog/1549285

總結

以上是生活随笔為你收集整理的使用反射建立一个用于生产短信对象的工厂方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。