先简单看个例子:
具体文件格式:
employeedao接口
package designer.common.dao;
import designer.common.domain.employee;
public interface employeedao {
//保存方法
void save(employee emp);
//更新方法
void update(employee emp);
}
employeeservice接口
package designer.common.service;
import designer.common.domain.employee;
public interface employeeservice {
//保存方法
void save(employee emp);
//更新方法
void update(employee emp);
}
employee类
package designer.common.domain;
public class employee {
}
employeedaoimpl实现类
package designer.common.dao.impl;
import designer.common.dao.employeedao;
import designer.common.domain.employee;
public class employeedaoimpl implements employeedao {
@Override
public void save(employee emp) {
System.out.println("保存员工");
}
@Override
public void update(employee emp) {
System.out.println("更新员工");
}
}
employeeserviceimpl实现类
package designer.common.service.impl;
import designer.common.TranctionManger.transactionmanger;
import designer.common.dao.employeedao;
import designer.common.domain.employee;
import designer.common.service.employeeservice;
public class employeeserviceimpl implements employeeservice {
private employeedao dao;
private transactionmanger tx;
@Override
public void save(employee emp) {
tx.begin();
try {
dao.save(emp);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}
}
@Override
public void update(employee emp) {
tx.begin();
try {
dao.update(emp);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}
}
}
transactionmanger事务类
package designer.common.TranctionManger;
public class transactionmanger {
public void begin(){
System.out.println("开启事务");
}
public void commit(){
System.out.println("提交事务");
}
public void rollback(){
System.out.println("回滚事务");
}
}
事务的概念
由此引出装饰模式
解决方案:
引入wapper增加类
之后的具体文件格式
对employeeserviceimpl实现类进行修改,其他类保持不变
package designer.common.service.impl;
import designer.common.TranctionManger.transactionmanger;
import designer.common.dao.employeedao;
import designer.common.dao.impl.employeedaoimpl;
import designer.common.domain.employee;
import designer.common.service.employeeservice;
public class employeeserviceimpl implements employeeservice {
private employeedao dao=new employeedaoimpl();
@Override
public void save(employee emp) {
dao.save(emp);
}
@Override
public void update(employee emp) {
dao.update(emp);
}
}
增加employeeservicewapper类
package designer.wapper;
import designer.common.TranctionManger.transactionmanger;
import designer.common.domain.employee;
import designer.common.service.employeeservice;
public class employeeservicewapper implements employeeservice {
private employeeservice empservice;//包含的真实对象
private transactionmanger tx; //事务管理器
public employeeservicewapper(employeeservice empservice, transactionmanger tx) {
this.empservice = empservice;
this.tx = tx;
}
@Override
public void save(employee emp) {
tx.begin();
try {
empservice.save(emp);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}
}
@Override
public void update(employee emp) {
tx.begin();
try {
empservice.update(emp);
tx.commit();
}catch (Exception e){
tx.rollback();
e.printStackTrace();
}
}
}
test测试方法类
package designer.common.test;
import designer.common.TranctionManger.transactionmanger;
import designer.common.domain.employee;
import designer.common.service.impl.employeeserviceimpl;
import designer.wapper.employeeservicewapper;
import org.junit.Test;
public class test {
@Test
public void test(){
employeeservicewapper wapper=new employeeservicewapper(
new employeeserviceimpl(),//真实对象
new transactionmanger()); //事务管理器
wapper.save(new employee());
System.out.println("------------------");
wapper.update(new employee());
}
}
测试结果为: