文档介绍:软件设计模式
第4章 GoF创建型模式
结构型(Creational)模式
GoF创建型模式的意图是解决对象创建的一类设计问题
比如,需要保证某个类型的对象在运行时只有一个实例,并共享给所有使用该对象的客户端
将一类对象的创建行为 try {
// 通过xml配置构建SessionFactory实例
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
}
catch (Throwable ex) {
//异常处理
}
}
/**
* 全局静态访问方法
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
原型(Prototype)模式
原型(Prototype)是指通过复制自己达到构造目标对象新实例的对象
使用原型设计模式的场景有
当一个类的实例状态只能是不同组合中的一种时,而不想通过平行类或子类的方式区分不同的状态组合
当业务代码中不能静态引用目标类的构造器来创建新的目标类的实例
当目标类实例化代价昂贵,不同的客户端需要单独使用一个目标类的对象时
原型模式类结构
使用原型的练****br/>COS的通知子系统负责发送多种类型的通知,如,订单通知、系统通知、会员通知等。不同种类通知,会有不同的标题、内容和尾注。同一种类的通知,又有不同的子类型通知,子类型通知标题、内容等不同,尾注、背景等相同;如,订单通知分成不同订单状态(订单已生成,订单已支付等)的子类型通知,系统通知分成不同消息级别(紧急,普通等)的子类型通知。如果为每个的通知类型或子类型单独设计一个类或子类,设计类的数量将会急剧增加
原型Notification的类结构
public class Notification implements Cloneable {
private String title;// 通知标题
private String content;//通知内容
private NotificationFooter footer;//通知尾注
/**
* setters,getters方法省略
*/
Notification(NotificationFooter foo) {
footer = foo;
}
/**
* 克隆Notification对象(浅拷贝-shallow copy,共享footer)
*/
***@Override
public Notification clone() {
try {
return (Notification) ();
} catch (CloneNotSupportedException e) {
//();
}
return null;
}
public class NotificationProtoManager {
private static HashMap<String, Notification> manager =
new HashMap<String, Notification>();//原型管理器
static {
// 初始化订单通知的尾注对象
NotificationFooter orderFooter = new NotificationFooter();
//订单通知原型构造
("order", new Notification(orderFooter));
//其他原型构造
}
/**
* 根据通知类型获取原型对象
*/
public static Notification getNotificationProto(String type) {
return (type);
}
}
public class NotificationSender {
// 存储通知的发送队列
private Queue<Notification> sendQueue = new LinkedBlockingQ