函數(shù)式編程是類似指令集運(yùn)行一個(gè)一個(gè)函數(shù)封裝在一起,起到方便閱讀代碼編寫健壯的程序
1.實(shí)例(通過對極光推送的數(shù)據(jù)格式封裝)
下面這個(gè)例子只操作了一個(gè)數(shù)據(jù)格式,這樣比起順序結(jié)構(gòu)代碼風(fēng)格更好,并且閱讀起來毫不費(fèi)勁。
JSONObject object = HxpJpush.getInstance().setplatform("all").pushToDevice("你的訂單有人報(bào)名了,打開消息界面查看簡歷!","訂單報(bào)名",list,ha);
2.實(shí)現(xiàn)過程
實(shí)現(xiàn)過程主要是設(shè)置一個(gè)靜態(tài)數(shù)據(jù)類,每個(gè)函數(shù)只返回自己的單例,最后的函數(shù)返回這個(gè)類中的變量
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.List;
/**
* Created by hexiangpeng on 2016/10/11.
* 極光推送數(shù)據(jù)結(jié)構(gòu)的封裝
*/
public class HxpJpush {
private String platform;
//先定義一個(gè)唯一的變量
private JSONObject jpushObject = new JSONObject();
// 實(shí)現(xiàn)單例的方法
private HxpJpush(){};
public static HxpJpush getInstance(){
return SingletonHolder.sInstance;
}
private static class SingletonHolder{
private static final HxpJpush sInstance = new HxpJpush();
}
/**
*
* @param platform 設(shè)置推送平臺"android", "ios"
* @return
*/
public HxpJpush setplatform(String platform){
jpushObject.put("platform",platform);
//此構(gòu)造的主要關(guān)鍵還是返回類本身從而實(shí)現(xiàn)命令式的調(diào)用
return getInstance();
}
/**
* 給某個(gè)設(shè)備推送通知
* @param msg_content 推送的消息
* @param msgtitle 推送的ttile
* @param registerId 推送的目標(biāo)
* @param extras 設(shè)置另外的東西
*/
public JSONObject pushToDevice(String msg_content,String msgtitle,List<String> registerId,HashMap<String,String> extras){
JSONObject regiserid = new JSONObject();
regiserid.put("registration_id",registerId);
jpushObject.put("audience",regiserid);
jpushObject.put("message",buildMessage(msg_content,msgtitle,extras));
JSONObject js = new JSONObject();
if(extras!=null) {
JSONObject androidObject = noticeIosAndAndroid(extras);
JSONObject iosObject = noticeIosAndAndroid(extras);
androidObject.put("alert",msg_content);
androidObject.put("title",msgtitle);
js.put("android",androidObject);
// js.put("ios",iosObject);
}
jpushObject.put("notification",js);
return jpushObject;
}
/**
* 創(chuàng)建message 參考http://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/
* @param msg_content
* @param msgtitle 設(shè)置
* @param extras 設(shè)置格外的東西
* @return
*/
private JSONObject buildMessage(String msg_content,String msgtitle,HashMap<String,String> extras){
JSONObject messageObject = new JSONObject();
messageObject.put("msg_content",msg_content);
messageObject.put("content_type","text");
messageObject.put("title",msgtitle);
if(extras!=null) {
// messageObject.put("extras", extras);
}
return messageObject;
}
/**
* 增加自定義的key-valua
* @param extras
* @return
*/
private JSONObject noticeIosAndAndroid(HashMap<String,String> extras){
JSONObject object = new JSONObject();
object.put("extras",extras);
return object;
}
}
3.總結(jié)
對一個(gè)程序員來說,封裝一個(gè)健壯可閱讀性良好的程序是必然的要求,在實(shí)現(xiàn)封裝的時(shí)候需要考慮設(shè)計(jì)模式,多線程訪問安全的問題,還得充分考慮多參數(shù)多用法,及封裝類對錯(cuò)誤的處理
我是程序員,編寫可愛的代碼