函数式编程是类似指令集运行一个一个函数封装在一起,起到方便阅读代码编写健壮的程序
1.实例(通过对极光推送的数据格式封装)
下面这个例子只操作了一个数据格式,这样比起顺序结构代码风格更好,并且阅读起来毫不费劲。
JSONObject object = HxpJpush.getInstance().setplatform("all").pushToDevice("你的订单有人报名了,打开消息界面查看简历!","订单报名",list,ha);
2.实现过程
实现过程主要是设置一个静态数据类,每个函数只返回自己的单例,最后的函数返回这个类中的变量
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.List;
/**
* Created by hexiangpeng on 2016/10/11.
* 极光推送数据结构的封装
*/
public class HxpJpush {
private String platform;
//先定义一个唯一的变量
private JSONObject jpushObject = new JSONObject();
// 实现单例的方法
private HxpJpush(){};
public static HxpJpush getInstance(){
return SingletonHolder.sInstance;
}
private static class SingletonHolder{
private static final HxpJpush sInstance = new HxpJpush();
}
/**
*
* @param platform 设置推送平台"android", "ios"
* @return
*/
public HxpJpush setplatform(String platform){
jpushObject.put("platform",platform);
//此构造的主要关键还是返回类本身从而实现命令式的调用
return getInstance();
}
/**
* 给某个设备推送通知
* @param msg_content 推送的消息
* @param msgtitle 推送的ttile
* @param registerId 推送的目标
* @param extras 设置另外的东西
*/
public JSONObject pushToDevice(String msg_content,String msgtitle,List registerId,HashMap 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;
}
/**
* 创建message 参考http://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/
* @param msg_content
* @param msgtitle 设置
* @param extras 设置格外的东西
* @return
*/
private JSONObject buildMessage(String msg_content,String msgtitle,HashMap 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 extras){
JSONObject object = new JSONObject();
object.put("extras",extras);
return object;
}
}
3.总结
对一个程序员来说,封装一个健壮可阅读性良好的程序是必然的要求,在实现封装的时候需要考虑设计模式,多线程访问安全的问题,还得充分考虑多参数多用法,及封装类对错误的处理
我是程序员,编写可爱的代码