(1)观察者设计模式:Observable -- 被观察者,Observer--观察者
interafce Observer{
public void doAction();
}
public abstract class Observable{
List<Observer> observales=new ArrayList<>();
public void add(Observer ob){
observales.add(ob);
}
public void remove(Observer ob){
observales.remove(ob);
}
public void notifyAll(){
for(Observer o:observales){
o.doAction();
}
}
}
JDK 已经提供了对应的观察者模式。如何更加方便的使用观察者,上面是同步阻塞。如何实现异步非阻塞,就是在通知的时候,启用异步线程执行。那如何进行封装呢。可以查看google的EventBus 类,进行对观察者的封装。
(2)模版设计模式,流程固定,子类只需要实现 具体的抽象方法就可以,
public abstratc class Template{
public abstract void eat();
public abstract void sleep();
public final void life(){
eat();
sleep();
}
}
class Human extends Template{
public abstract void eat(){
}
public abstract void sleep(){
}
}
具体在开源界的实现
JdbcTemplate,RedisTemplate可以查看这些代码。
(3)回调设计模式
回调类似模版
interface callBack{
void before();
void execute();
void after();
}
public class A {
public void execute(callBack callBack){
callBack.before();
callBack.execute();
callBack.after();
}
}
(4)策略设计模式:动态决策执行哪个子类
工厂+策略模式生成对应的子类。可以使用Map缓存对应的对象
开源的例子:JDBCTemplate中把具体的DO转换成Model
inteface RowMap{
}
或者比如算法排序,具体的排序方式都是子类,一个排序工厂,生成具体的一个排序对象。
(5)责任链的设计模式:就是把一个请求传给多个类,每个类都执行一次。
具体开源:拦截器,过滤器
public abstract class Handler{
Handler successor;
public void setsuccessor(Handler handler){
this.successor=handler;
}
public final void dohandl(){
boolean resullt=handle();
if(!resullt&&successor!=null){
successor.dohandl();
}
}
public abstract boolean handle();
}
public class HandlerChain{
Handler head;
Handler tail;
public void addHandle(Handler handle){
handle.setsuccessor(null);
if(head==nulll){
head=handle;
tail=handle;
return;
}
tail.setsuccessor(handle);
tail=handle;
}
public void handle(){
if(head!=null){
head.dohandl();
}
}
}
责任链可以使用链表或者数据来实现。这样可以实现拦截器或者过滤器的模式