下载 23种设计模式源码 :http://download.csdn.net/download/knight_black_bob/8936043
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
创建型模式,共五种:
工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
结构型模式,共七种:
适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式
行为型模式,共十一种:
策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
每次见 建造者 都是建造 一个 汽车 需要 一个 轮子 等 ,想不到怎么用 ,现在 拼 json 就可以 用得到啊!············
packag e 设计模式.建造者; import java.util.Date; public class Notification { public Notification() { } int id; byte[] token; // 据官方的文档,当command是2时,这个必须是32 bytes的。是二进制格式的。 byte[] payload; Date expirationDate; static final int defaultPriority = 10; int priority = defaultPriority; public int getPriority() { return priority; } public void setPriority(int priority) { this.priority = priority; } public byte[] getToken() { return token; } public void setToken(byte[] token) { this.token = token; } public byte[] getPayload() { return payload; } public void setPayload(byte[] payload) { this.payload = payload; } public Date getExpirationDate() { return expirationDate; } public void setExpirationDate(Date expirationDate) { this.expirationDate = expirationDate; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("{").append("\"expirationDate\":").append(expirationDate).append("\"id\":").append(id).append( ",\"payload\":").append(payload.toString()).append(",\"priority\":").append(priority).append( ",\"token\":").append(token.toString()).append("}"); return sb.toString(); } @Override public boolean equals(Object obj) { if (obj != null) if (obj instanceof Notification) return this.id == ((Notification) obj).getId(); return false; } }
package com.cmcc.apns.message; import java.nio.charset.Charset; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; import com.alibaba.fastjson.JSONObject; /** * 辅助生成Notification的工具类。 * * <pre> * Notification notification = new NotificationBuilder().setToken(token).setBadge(1).setAlert("just test").build(); * </pre> * */ public class NotificationBuilder { AtomicInteger ai = new AtomicInteger(0); public AtomicInteger getAi() { return ai; } public void setAi(AtomicInteger ai) { this.ai = ai; } byte[] token = null; int priority = Notification.defaultPriority; // new Date(3000, 1, 1).getTime() == 92464560000000L private Date expirationDate = new Date(92464560000000L); JSONObject payload = new JSONObject(); JSONObject aps = new JSONObject(); String alert = null; String content; JSONObject alertObject = new JSONObject(); final HashMap<String, Object> customProperties = new HashMap<String, Object>(); static final Charset utf8 = Charset.forName("utf-8"); static final int MAX_PAYLOAD_SIZE = 256; public NotificationBuilder(AtomicInteger ai) { this.ai = ai; } public Notification build() { Notification notification = new Notification(); notification.setId(ai.intValue()); if (token != null) { notification.setToken(token); } else { throw new IllegalArgumentException("token is null!"); } notification.setPriority(priority); // TODO 这里是否把没有设置过期时间的通知都设置成无限的? notification.setExpirationDate(expirationDate); /** * <pre> * 因为这里有两种格式,一种是: * "aps" : { * "alert" : "You got your emails.", * "badge" : 9, * "sound" : "bingbong.aiff" * }, * * 另一种是: * "aps" : { * "alert" : { * "body" : "Bob wants to play poker", * "action-loc-key" : "PLAY" * }, * "badge" : 5, * }, * </pre> */ if (alert != null) { aps.put("alert", alert); } else { aps.put("alert", alertObject); } aps.put("sound", "default"); payload.put("aps", aps); //修改 apn 格式 content 放到 apns 外面 if (content != null) payload.put("content", content); byte[] bytes = payload.toString().getBytes(utf8); if (bytes.length > MAX_PAYLOAD_SIZE) { throw new IllegalArgumentException("payload.length >" + MAX_PAYLOAD_SIZE); } notification.setPayload(bytes); return notification; } public NotificationBuilder setToken(byte[] token) { if (token.length != 32) { throw new IllegalArgumentException("token.length != 32"); } this.token = token; return this; } // TODO 这里应该可以自动去掉中间的空白字符 public NotificationBuilder setToken(String token) { try { byte[] hex = Hex.decodeHex(token.toCharArray()); setToken(hex); } catch (DecoderException e) { throw new RuntimeException(e); } return this; } public NotificationBuilder setPriority(int priority) { this.priority = priority; return this; } public NotificationBuilder setExpirationDate(Date expirationDate) { this.expirationDate = expirationDate; return this; } public NotificationBuilder setBadge(int badge) { aps.put("badge", badge); return this; } public NotificationBuilder setSound(String sound) { aps.put("sound", sound); return this; } public NotificationBuilder setcontentAvailable(boolean contentAvilable) { aps.put("content-available", 1); return this; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public NotificationBuilder setAlert(String alert) { this.alert = alert; return this; } public NotificationBuilder setAlertBody(String alertBody) { alertObject.put("body", alertBody); return this; } public NotificationBuilder setAlertActionLocKey(String alertActionLocKey) { alertObject.put("action-loc-key", alertActionLocKey); return this; } public NotificationBuilder setAlertLocKey(String alertLocKey) { alertObject.put("loc-key", alertLocKey); return this; } public NotificationBuilder setAlertLocArgs(String... alertLocArgs) { alertObject.put("loc-args", alertLocArgs); return this; } public NotificationBuilder setAlertLocArgs(List<String> alertLocArgs) { alertObject.put("loc-args", alertLocArgs); return this; } public NotificationBuilder setAlertLunchImage(String alertLunchImage) { alertObject.put("launch-image", alertLunchImage); return this; } public NotificationBuilder setUserProperty(String key, Object value) { payload.put(key, value); return this; } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
**建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...
以下是关于“C#设计模式之建造者模式”的详细说明。 **建造者模式的核心概念** 1. **产品类(Product)**: 这是最终要创建的对象,比如在本实例中可能是`Actor`类,代表一个角色。产品类通常包含多个组成部分,...
建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...
建造者模式是软件设计模式中的一种,属于创建型模式,它的主要目的是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java的23种设计模式中,建造者模式是一个非常实用且重要的模式。 ...
【创建型模式】设计模式之建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是设计模式中的一个创建型模式,它提供了一种方法来分步骤构造复杂的对象,使得构造过程和表示分离,使得同样的构建过程可以...
建造者模式,是设计模式中的一种创建型模式,它的核心思想是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java编程中,这种模式经常用于生成对象,特别是当对象的创建过程较为复杂时,...
在深入探讨C#设计模式中的建造者(Builder)模式之前,我们先来理解一下什么是设计模式。设计模式是在软件工程中解决常见问题的一种通用可重用解决方案,它们提供了一种标准化的方法来解决软件开发中遇到的挑战。...
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
建造者模式是软件设计模式中的一种,属于创建型模式,它的主要目的是将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。在Java中,建造者模式经常用于构造复杂对象,通过一步一步地创建对象,使得...
建造者模式(Builder Pattern)是Java设计模式中的一种,它属于创建型模式,主要用于构建复杂的对象。这种模式将对象的创建过程与表示分离,使得同样的创建过程可以创建不同的表示。在实际开发中,当我们需要创建的...
"Java设计模式之建造者模式实例详解" 本文主要介绍了Java设计模式之建造者模式,结合具体实例形式分析了建造者模式的概念、原理、实现方法与相关使用注意事项。 建造者模式的概念 建造者模式(Builder Pattern)...
在建造者模式中,有以下几个角色: 产品(Product):表示被构建的复杂对象。通常包含多个部分或组件。 抽象建造者(Builder):定义构建产品的抽象接口,包含创建和组装产品的方法。 具体建造者(Concrete Builder...
本文实例讲述了Python设计模式之建造者模式。分享给大家供大家参考,具体如下: 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 下面是一个建造者模式的...
本文实例讲述了JavaScript设计模式之建造者模式。分享给大家供大家参考,具体如下: 一、建造者模式模式概念 建造者模式可以将一个复杂的对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。也就是说...
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...
JAVA设计模式之建造者模式原理与用法详解 一、概述 JAVA设计模式之建造者模式是创建型模式的一种,它将复杂对象的构造与它的实现相分离,让相同的构建过程可以创建不同的对象。这使得建造者模式非常适合复杂对象的...
Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...
建造者模式是一种软件设计模式,属于创建型模式之一,主要用于解决创建复杂对象的问题。在实际应用中,当对象的构造过程过于复杂,涉及到多个属性或者子对象的组合时,直接通过构造函数创建可能会导致代码混乱、难以...