设计模式简介
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
组合实体模式
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
组合实体(Composite Entity) - 它是主要的实体 bean。它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期。
粗粒度对象(Coarse-Grained Object) - 该对象包含依赖对象。它有自己的生命周期,也能管理依赖对象的生命周期。
依赖对象(Dependent Object) - 依赖对象是一个持续生命周期依赖于粗粒度对象的对象。
策略(Strategies) - 策略表示如何实现组合实体。
实现
public class UserName {
public String name;
public String getName() {
return name;
}
public UserName setName(String name) {
this.name = name;
return this;
}
}
public class UserAge {
public int age;
public int getAge() {
return age;
}
public UserAge setAge(int age) {
this.age = age;
return this;
}
}
粗粒度组装
public class User {
public UserName userName;
public UserAge userAge;
public void setUser(String name,int age) {
userName = new UserName().setName(name);
userAge = new UserAge().setAge(age);
}
public Object[] getUser() {
return new Object[] {userName,userAge};
}
}
建立实体类
public class UserEntity {
public User user = new User();
public void setUser(String name,int age) {
user.setUser(name, age);
}
public Object[] getUser() {
return user.getUser();
}
}
读取实体类
public class Client {
public UserEntity userEntity = new UserEntity();
public void getUserInfo() {
for (Object o : userEntity.getUser()) {
if(o instanceof UserName) {
System.out.println("姓名:"+((UserName)o).getName());
}else {
System.out.println("年龄:"+((UserAge)o).getAge());
}
}
}
public void setUserInfo(String name,int age) {
userEntity.setUser(name, age);
}
}
运行
public static void main(String[] args) {
Client client = new Client();
client.setUserInfo("小明", 15);
client.getUserInfo();
System.out.println("============");
client.setUserInfo("小红", 13);
client.getUserInfo();
}
结果
姓名:小明
年龄:15
============
姓名:小红
年龄:13