再看设计模式——中介者模式与观察者模式

观察者模式(Observer)是典型的订阅发布,是event机制的常见实现模式,MVC中的M和V之间的数据流订阅变动就靠这个模式实现。有push推模型(通知所有可能的事件处理)和pull拉模型(感兴趣的事件处理自己获取)两种实现(java中有java.util.Observer接口可以参考)。 这个实现的问题是event机制是同步的,并没有异步化。另一个问题是事件处理的顺序。 中介者模式(Medi …

阅读全文

看设计模式——模板方法与策略模式

模板方法模式(Template Method)和策略模式都是用来解决通用算法和使用的上下文环境分离的代码抽象问题,前者思路是靠继承,后者则靠委托。 模板方法模式很简单,就是提供一些可以用来继承覆盖的通用方法,然后在上下文环境中提前调用通用这些方法,类似做stub。派生类继承后可以改写通用方法,从而完成更多具体的算法实现。缺点是导致派生类里面的具体算法实现和基类无形中绑定了。 策略模式相对复杂一些, …

阅读全文

WordPress5.0插件适应升级指南

最近发布的WordPress5.0因为启用全新可视化编辑器gutenberg而带来了巨大变化,除了用户文章编辑使用习惯上的不适之外,更关键的是因为编辑面板的调整,你会发现自己原来一直能够好好工作的插件都突然间失灵啦。比如本人开发的simple post series插件已经近半年没有更新啦,但是之前在4+版本都可以正常工作的,结果升级到最新5.0版发现居然功能从边栏消失不见啦,而且写的editor …

阅读全文

再看设计模式——工厂方法与抽象工厂模式

传统GOF的24种设计模式中有两个工厂模式:工厂方法(factory method) vs 抽象工厂(absctract factory),而通常又能听到所谓的简单工厂模式(simple factory)。实际上简单工厂的实现就是一个static的工厂创建方法,也就是工厂方法,两个是同一个东西。 工厂方法模式在工程实现上可以使用map替代switch case,用来关联产品标识符和具体产品类型(这 …

阅读全文

再看设计模式——状态模式与策略模式

根据不同的状态,执行不同的行为。相比switch case思路,使用状态模式能让数据与行为封闭性更好,添加新的状态也比较简单,状态间的切换逻辑不用刻意去维护,但是不如switch切换状态顺序流那么清晰。 实际实现中状态模式对”开闭原则”的支持并不太好。有两种实现存放的思路: 静态状态。初始化时把所有可能的状态对象都new好,状态切换时通过赋值改变当前的状态。 实例化状态。每 …

阅读全文