这里贴一下以前对工厂、策略、观察者设计模式的代码实现。
简单工厂设计模式
简单工厂设计模式,并不属于标准的23种设计模式之一。
ServiceFactory提供一个创建服务方法。createService(),主要是运用反射产生具体的服务代理对象。代理对象在这里执行方法时,加了一段业务逻辑处理。其实这段代码采用了面向切面的思想(AOP思想),其主要目的实现解耦。获取执行方法上的注解。
spring中加在类上的@Service、@Controller、@Component、以及可以加在类上和方法上的@Transactional注解,原理都是类似的。
采用饿汉式的简单工厂模式
|
|
观察者设计模式
在说观察者设计模式之前,需要提一个东西。
事件监听:Event事件对象封装了事件源及动作。
事件监听机制
- 事件监听涉及三个组件:事件源,事件对象,事件监听。
- 当事件源上发生某一个动作时,它会调用事件监听器的一个方法,并在调用该方法时,把事件对象传递进去。
代码实现
|
|
|
|
|
|
|
|
运行结果
Java中常用的各种监听都是观察者设计模式。
策略设计模式
功能并不清楚对结果的处理方式,对结果的处理由调用者进行传入。而只是把对结果的处理方式做成接口,通过接口来约定双方的行为。
代码
|
|
|
|
|
|
封装对方法的具体细节
处理对查询单一的对象,把具体的处理方式BeanHandler传入。
处理对查询一群的对象,把具体的处理方式BeanListHandler传入。
上面这段代码是采用JDBC,运用元数据,实现一个简单的OR-Mapping映射类型的DB框架。
Java中的运用
- 之前有说过TreeSet集合,可以对元素进行排序。但是它本身并不知道,元素该怎么排,而是由调用者,通过实现Comparator接口,把对元素进行排序方式进行传入,TreeSet按照给定的方式进行处理。
- mybatis中对于查询的处理,在一级缓存与二级缓存中也是使用策略模式,通过实现ResultHandler接口对查询结果进行处理。