一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
抽象工厂方法
提供一个创建一系列相关或相互依赖对象的接口,而无需具体指定他们的实现。
状态模式
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。(状态模式主要解决的是控制一个对象状态转换的条件表达式过于复杂时的情况)
适配器模式
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。
组合模式
将对象组合成树形结构以表示 “部分-整体” 的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
责任链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成链条,并沿着这条链传递该请求,直到有一个对象处理它为止。
中介者模式
用 一个中介对象封装一系列对象交互。中介者使得各对象不需要显示地互相引用,从而使得其耦合松散,而且可以独立地改变它们之间的交互。
享元模式
运用共享技术有效地支持大量细粒度的对象。
解释器模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
访问者模式
表示一个作用于某种对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
Java中的观察者模式Observable(观察者模式Subject)
类:当存在多对一的依赖关系的时候,我们会用到观察者模式,其中Subject用于注册,移除,发生改变时通知Observer,Observer收到通知之后进行update操作。Observer储存在Vector容器中
Observer(观察者模式的观察者)
接口:定义了update(Observable o, Object arg)方法,当调用Observable的notifyObservers时,会触发update。观察者需要实现这个接口,重写update方法实现特定功能
Java中的单例模式
普通的线程安全单例
public class Singleton{ private static final Singleton INSTANCE = new Singleton(); private Singleton(){} public static Singleton getSingleton(){ return INSTANCE; } }
双检查线程安全单例
public class SafePublish { private volatile static SafePublish instance = null; public static SafePublish getInstance() { if (instance == null) { synchronized (SafePublish.class) { if (instance == null) { instance = new SafePublish(); } } } return instance; } private SafePublish() {} }
枚举线程安全单利
public enum Singleton { INSTANCE; } 分布式 一致性哈希算法主要用于解决分布式系统中负载均衡的问题。
一般情况:
假设数据hash过后返回值大小2^64,构成一个虚拟圆环
例如几台服务器的ip取模映射到环上,把服务器放到圆环中对应的位置
然后数据过来之后取模映射完之后,开始顺时针找最近的服务器处理
问题:服务器数量不多,容易出现数据倾斜问题(服务器分布不均匀,缓存数据集中在部分服务器上)
解决方案:可以增加虚拟节点,例如在主机ip后加编号取模映射到环的不同位置。然后数据遇到虚拟节点之后再映射回真实节点。
缓存 引入缓存