设计模式-责任链模式
责任链模式(Chain of Responsibility)客户端对象发起请求,请求由下一个对象往下传递,直到被处某一个对象处理了此请求。客户端对象不需要知道是哪个节点进行了处理。这就可以在不景响客户端对象的情况下动态地重新组织和分配责任。
白话:一条对象链调下去。A->B->C->DA 持有 B 的引用,B 持有 C 的引用,C 持有 D 的引用。开始执行A的逻辑,A能处理就处理了,不能处理就拿着B的引用,调用B去处理。整个逻辑就是这样一直往下去推。
1.角色抽象处理者(Hand):处理请求的接口。所有处理者都实现这个接口。接口可以定义出一个方法以设定和返回对下家的引用。通常由抽象类或接口实现。具体处理者(ConcreteHandler)具体处理者接到请求后可以选择将请求处理掉,或者将请求传给下家。因为具体处理都持有下家的引用。
2.处理顺序可线性,可循环。
1.手动构建责任链这种方式,我觉得挺low的,需要手动构建,不过在刚学习的时候,还是可以帮助理解。需要角色:
Handler
Handler实现类
12345678910111213141516171819 ...
设计模式-单例模式
单例模式什么是单例模式?单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。特点:
一个类只能有一个实例
自己创建这个实例
整个系统都要使用这个实例
什么时候用单例模式?用我的话说
只用一个实例就能解决问题的时候,没必要创建多个实例的时创建数据库连接池对象一个就够了
操作打印机的时候一台打印机总不能让所有人同时去操作,确保只有一个实例,每次只能被一个人调用该实例。
饿汉模式优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程并发问题。缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。
但是说人话,如果这个对象最终一定会被使用到,最好是用饿汉模式,避免线程并发问题。但是如果就是想追求这么点性能要求,也不是不可以用懒汉模式。
12345678public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton(){& ...
设计模式-静态代理模式
静态代理三个角色静态代理的条件至少有三个角色
真实角色(RealObject)
代理角色(ProxyObject)
接口这三个(AbstractObject)
要求
真实角色与代理角色实现相同的接口。
代理类要持有真实角色的引用。重点:真实角色、代理角色、接口的关系。代理接口实际上是抽象出所有真实角色的共有方法。
用法1.创建真实角色2.创建代理角色3.代理角色.方法()。
注意:代理模式是要让代理类来使用委托类,所以是通过 new 代理类,在代理类中使用委托类,有点像回调函数的用法。
测试方法12345678910111213/** * 功能描述:测试 * @author liukai * @date 2015年11月13日 下午3:47:33 * @version 1.0 */public class Test { public static void main(String[] args) { ServiceImpl serviceImpl = new ServiceImpl(); IService iService = (IService) Pro ...
设计模式-策略模式
前言策略模式在多种相似业务抽象相似性,提供扩展性上是非常好用。