Spring设计模式(装饰器模式)

模式的定义:

装饰者模式定义:

​ 动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案。

模式的结构图 :

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");
}

相关文章:

  • 2021-10-26
  • 2021-07-10
  • 2021-12-13
猜你喜欢
  • 2021-05-12
  • 2021-08-01
  • 2021-04-05
  • 2021-07-13
  • 2021-04-27
相关资源
相似解决方案