Spring设计模式(装饰器模式)
模式的定义:
装饰者模式定义:
动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案。
模式的结构图 :
模式包含角色 :
抽象构件类(Component):给出一个抽象的接口,用以规范准备接收附加责任的对象
具体构件类(ConcreteComponent):定义一个具体的准备接受附加责任的类,其必须实现Component接口。
装饰者类(Decorator):持有一个构件(Conponent)对象的实例,并定义一个和抽象构件一致的接口。
具体装饰者类(ConcreteDecoratator):定义给构件对象“贴上”附加责任。
使用场景 :
I/O流,数据源包装 ,Spring 中用到的装饰器模式在类名上有两种表现:一种是类名中含有 Wrapper,另一种是类名中含有Decorator。
模式具体实现 :
一 :基础类
@Data
public class Member {
private String username;
private String password;
private String mid;
private String info;
}
@Data
@AllArgsConstructor
public class ResultMsg {
private int code;
private String msg;
private Object data;
}
二:抽象构件类
public interface SiginService {
/**
* 注册的方法
* @param username
* @param password
* @return
*/
public ResultMsg regist(String username, String password);
}
三:装饰者类
public class RegistForThirdService implements SiginService {
private SiginService siginService;
public RegistForThirdService(SiginService siginService){
this.siginService = siginService;
}
public ResultMsg registForQQ(String openId){
return siginService.regist(openId,null);
}
public ResultMsg regist(String username, String password) {
return siginService.regist(username,password);
}
}
四 具体构件类
public class SiginServiceImpl implements SiginService {
public ResultMsg regist(String username, String password) {
return new ResultMsg(200,"注册成功",new Member());
}
}
五:测试类
@Test
public void test(){
RegistForThirdService siginService = new RegistForThirdService(new SiginServiceImpl());
siginService.registForQQ("openId");
}