java通過對極光推送數(shù)據(jù)類的封裝實(shí)現(xiàn)函數(shù)式編寫

函數(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ò)誤的處理

我是程序員,編寫可愛的代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,048評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,338評論 4 61
  • 哈哈 我是誰啊 真特么逗
    Vigilius閱讀 289評論 0 0
  • 今天是好友閨蜜代代的生日,我們倆八點(diǎn)半下班后,便去了公司樓下的咖啡館,卸下一天繁忙的工作,沒有什么比好友座談更讓人...
    小秋在唱歌閱讀 225評論 0 0

友情鏈接更多精彩內(nèi)容