概念
定义一个操作中算法的骨架,将具体的操作延时到子类,在不改变结构的情况下为可以修改具体的特定步骤,主要的实现原理是继承
角色
- 抽象出方法的父类
- 具体实现的子类
利弊
利
- 代码复用
- 反向的控制结构
- 具体实现细节不改变父类结构
弊
- 每个不同的实现都需要不同的子类,会导致系统变得庞大
demo
登录的场景
抽象出方法的父类:
登录一般都是要实现校验的步骤和消息推送,还有其实的例如日志记录等,这类用了校验和消息推送作为登录场景的必要步骤,不同的登录方法有不同的校验和不同的消息推送方式。
public abstract class Login {
/**
* @Title: login
* @Description: 登录
* @param @return 设定文件
* @return Boolean 返回类型
* @throws
*/
public Boolean login(String userName,String password){
this.verify(userName, password);
this.verify(userName, password);
return true;
}
/**
* @Title: verify
* @Description: 校验
* @param @param userName
* @param @param password
* @param @return 设定文件
* @return Boolean 返回类型
* @throws
*/
public abstract Boolean verify(String userName,String password);
/**
* @Title:sendMessage
* @Description: 消息通知
* @param @param userName
* @param @param password
* @param @return 设定文件
* @return Boolean 返回类型
* @throws
*/
public abstract Boolean sendMessage(String userName,String password);
}
通多不同的方式有不同的实现,子类将具体实现出来
支付宝的验证登录方式
···
public class AliPayLogin extends Login {
@Override
public Boolean verify(String userName, String password) {
System.out.println("阿里第三方登录校验");
return true;
}
@Override
public Boolean sendMessage(String userName, String password) {
System.out.println("阿里第三方登录消息通知");
return true;
}
}
···
微信的登录方式
···
public class WechatLogin extends Login {
@Override
public Boolean verify(String userName, String password) {
System.out.println("微信系统第三方校验");
return true;
}
@Override
public Boolean sendMessage(String userName, String password) {
System.out.println("微信系统第三方消息通知");
return true;
}
}
···
在是使用的时候完全可以服用login的代码,这样就做到代码的复用,子类又可以拥有不同的实现。
···
public static void main(String[] args) {
Login login = new AliPayLogin();
login.login("test", "1111");
login = new WechatLogin();
login.login("test", "1111");
}
···
网友评论