代理模式
代理模式 对象结构型模式 模式动机 有时候,一个客户不想或者无法直接引用一个对象,此时可以通过一个“代理”作为第三者进行间接引用。通过代理对象可以去掉客户不能看到的内容或者添加客户需要的额外服务。 通过引入一个新对象(比如远程代理对象),实现对真实对象的操作或者将新对象作为真实对象的替身,间接访问真实对象。 应用 代理模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 代理模式包含如下角色: 抽象主题角色Subject 代理主题角色Proxy 真实主题角色RealSubject 代理模式的示意图可以简化成如下形式: 典型代码类实现代码: public class Proxy implements Subject { private RealSubject realSubject = new RealSubject(); public void preRequest() { // ... } public void request() { preRequest(); ...
享元模式
...
外观模式
...
装饰模式
装饰模式 对象结构型模式 模式动机 有两种方式可以给类增加行为:继承或者关联 继承:使子类同时拥有父类方法和自己的方法 关联:把一个类的对象嵌入到另一个对象中(比如组合关系),由另一个对象决定是否调用嵌入对象的行为以扩展自己的行为 装饰模式以对客户端来说透明的方式动态地给一个对象附加更多责任,即装饰前后的对象在客户端眼里是一样的。装饰模式可以在不需要创建更多子类的情况下扩展对象功能。 应用 装饰模式动态的给对象增加额外职责,比直接生成子类更灵活。装饰模式的别名是包装器,和适配器模式别名相同,但他们用于不同场合。 装饰模式包含如下角色: 抽象构件Component 具体构件ConcreteComponent 抽象装饰类Decorator 具体装饰类ConcreteDecorator 与继承相比,关联关系的优势是不会破坏类的封装性,因为继承的耦合比较大。开发阶段关联与继承的代码量差别不大,但是维护阶段关联关系的松耦合性使系统更容易维护。当然,关联关系的缺点就是要创建更多对象。 扩展系统时使用装饰模式比使用继承更加灵活 典型抽象装饰类代码如下: public class...
桥接模式
...
组合模式
...
适配器模式
适配器模式 类结构型模式 /...
模板方法模式
...
中介者模式
...
观察者模式
观察者模式 对象行为型模式 模式动机 在软件系统中,可能有一些事件驱动的设计。比如在一个气象系统中,有一个Weather对象,可以获取天气状况;该系统希望设计几种公告板,显示不同的天气状况,公告板需要实时更新,即随着Weather对象的天气属性更新而更新。这时候就需要利用观察者模式来监听数据的更新,实时更新公告板。同时要考虑到扩展性,随时增加新的公告板 /...