模版模式
父类中定义了算法或业务执行顺序
子类中进行具体的实现过程
/**父类 定义日志*/
public abstract class SysLog {
public void log(String obj) {
// 系统日志记录
System.out.println(obj);
.....
// 具体业务日志记录
ObjLog1(obj);
ObjLog2(obj);
}
protected abstract void ObjLog1(String obj);
protected abstract void ObjLog2(String obj);
}
/**子类*/
public class AppLog extends SysLog {
protected void ObjLog1() {
// 具体的业务逻辑
}
protected void ObjLog2() {
// 具体的业务逻辑
}
}
public static void main(String[] args) {
SysLog log = new AppLog(null);
log.log();
}
观察者模式
三个角色分为,事件、观察者、发布者。
一对多的行为模式
/**
* 定义一个事件
* 发送信息(短信,邮件)
*/
public class MessAgeEvent extends ApplicationEvent {
/**
* 事件源
* @param source 事件源(被观察者)
*/
public MessAgeEvent(Object obj) {
super(obj);
}
}
/**观察者(邮件)*/
@Component
public class EmailListener implements ApplicationListener<MessAgeEvent> {
@Override
public void onApplicationEvent(MessAgeEvent event) {
Object obj = event.getSource();
// 发送邮件处理业务
}
}
/**观察者(短信)*/
@Component
public class NoteListener implements ApplicationListener<MessAgeEvent> {
@Override
public void onApplicationEvent(MessAgeEvent event) {
Object obj = event.getSource();
// 发送短信处理业务
}
}
/**
* 发布者
*/
@Service
@RequiredArgsConstructor
public class MessAgeService {
/** 注入ApplicationContext用来发布事件 */
private final ApplicationContext applicationContext;
/**
* 信息通知
*/
public String MessAge(String orderId) {
applicationContext.publishEvent(new MessAgeEvent(this));
return "发送成功";
}
}
适配器模式
这个模式比较复杂,这位大佬写的很好 我就直接转载了
版权声明:适配器模式解释文章 为CSDN博主「理想万岁万万岁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36234720/article/details/130011467
装饰者模式
在原有的接口的情况下,动态的增加了新的功能,还是以日志为例
public abstract class SysLog {
String ObjLog1(String msg);
}
public class SysLogServiceImpl implements SysLog {
/**
* 记录日志
* @param username
* @param password
* @return
*/
public String ObjLog1(String msg){
return "记录成功";
}
}
/**拓展业务日志*/
public interface MyLogService extends SysLog {
/**
* 原日志方法
* @param username
* @param password
* @return
*/
String ObjLog1(String msg);
/**
* 业务日志
*/
String ObjLog2(String msg);
}
public class MyLogServiceImpl implements MyLogService {
private SysLog sysLog;
public MyLogServiceImpl(SysLog sysLog) {
this.sysLog = sysLog;
}
@Override
public String ObjLog1(String msg) {
String result = sysLog.ObjLog1(msg);
//系统日志记录成功
if(result){
result = ObjLog2(msg);
}
return result;
}
/**
* 拓展业务日志
* @param username
* @return
*/
@Override
public String ObjLog2(String username) {
return "业务日志记录成功";
}
}
public static void main(String[] args) {
/**可以new 其他的子类*/
SysLog sysLog = new SysLogServiceImpl();
SysLog mylog = new MyLogServiceImpl(sysLog);
mylog.ObjLog1("123");
}