设计模式:适配器模式和装饰器模式

package study.design.adapter.pass;

import study.design.adapter.ResultMsg;


/**
 * @comment 原接口
 * @author bin
 * @date 2018年8月2日 
 */
public interface SignService{
	
	public ResultMsg signIn(String userName,String passWord) ;
	
	public ResultMsg signUp(String userName,String passWord) ;
}
package study.design.adapter.pass;

import study.design.adapter.ResultMsg;
/**
 * 
 * @comment 原方法 
 * @author bin
 * @date 2018年8月2日
 */
public class SignServiceImpl implements SignService{
	
	@Override
	public ResultMsg signUp(String userName, String passWord) {
		return new ResultMsg(200, userName, "注册成功");
	}
	
	@Override
	public ResultMsg signIn(String userName, String passWord) {
		return new ResultMsg(200, userName, "登录成功");
	}

}
package study.design.adapter.pass;

import study.design.adapter.ResultMsg;

/**
 * @comment 第三方登录实现服务
 * @author bin
 * @date 2018年8月2日 
 */
public class ThridSignServiceImpl extends SignServiceImpl{

	@Override
	public ResultMsg signUp(String userName, String passWord) {
		// TODO Auto-generated method stub
		return super.signUp(userName, passWord);
	}

	@Override
	public ResultMsg signIn(String userName, String passWord) {
		// TODO Auto-generated method stub
		return super.signIn(userName, passWord);
	}
	/*
	 * 新增QQ登录
	 */
	public ResultMsg QQSignIn(String userName) {
		
		return new ResultMsg(200,userName,"QQ登录成功");
	}
}
package study.design.adapter.pass;


/**
 * 适配器模式
 * @comment
 * 需求:在不改变原有登录注册等业务场景下 新增第三方登录 
 * 理解:在未改动原有服务实现的情况下 增加新的方法
 * 实现方式:继承原有服务 新增方法
 * @author bin
 * @date 2018年8月2日 
 */
public class ThirdSignTest {
	
	public static void main(String[] args) {
		//原注册登录的方式
		SignService sign=new SignServiceImpl();
		String userName="用户名";
		String passWord="密码";
		sign.signIn(userName, passWord);
		sign.signUp(userName, passWord);
		//扩展第三方登录后方式
		ThridSignServiceImpl thrdSign = new ThridSignServiceImpl();
		thrdSign.signIn(userName, passWord);//原登录方法还可以使用
		thrdSign.signUp(userName, passWord);//原注册方法还可以使用
		thrdSign.QQSignIn(userName);//新增的QQ登录
		
		
	}
}
package study.design.decorator.pass;

import study.design.adapter.ResultMsg;

/**
 * @comment 第三方登录实现服务
 * @author bin
 * @date 2018年8月2日 
 */
public class ThridSignServiceImpl implements ThridSignService{

	SignService signService;
	
	public ThridSignServiceImpl(SignService signService) {
		this.signService=signService;
	}
	
	@Override
	public ResultMsg signIn(String userName, String passWord) {
		// TODO Auto-generated method stub
		return signService.signIn(userName, passWord);
	}

	@Override
	public ResultMsg signUp(String userName, String passWord) {
		// TODO Auto-generated method stub
		return signService.signUp(userName, passWord);
	}
	@Override
	public ResultMsg QQSignIn(String userName) {
		return new ResultMsg(200,userName,"QQ登录成功");
	}

}

            ===============================================================------
            装饰器模式                          |   适配器模式
            -----------------------------------+---------------------------------
            是一种非常特别的适配器模式            |  可以不保留层级关系
            -----------------------------------+---------------------------------
            装饰者和被装饰者都要实现同一个接口     |  适配者和被适配者没有必然的层级联系
            主要目的是为了扩展,依旧保留OOP关系    |  通常采用代理或者继承形式进行包装
            -----------------------------------+----------------------------------
            满足is-a的关系                      |   满足has-a
            -----------------------------------+----------------------------------
            注重的是覆盖、扩展                   |   注重兼容、转换
            -----------------------------------+----------------------------------
适配器实现方式:继承该类并扩展即可

装饰器模式:实现接口,并在定义的装饰器中声明接口并定义参数为接口的构造方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StrideBin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值