设计模式之行为结构

(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();

}

}

}

责任链可以使用链表或者数据来实现。这样可以实现拦截器或者过滤器的模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值