外观模式
外观模式可以将一些列复杂的类包装成一个简单的封闭接口。
外观模式的最普遍应用就是,现在比较普遍的开源框架,例如nhibernate就可以算是一种外观模式
外观模式对客户屏蔽了复杂的子系统组件,并为一般用户提供了一个比较简单的程序设计接口。但是,它并没有限制高级用户在需要时使用深层次的,较复杂的类。
享元模式
享元模式可以避免大量非常相似的类的开销。
适用场景:在程序设计中会出现这样的情况:看起来似乎需要大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本都是相同的,有时就能够大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。
从类中移出某些数据并存储到外部,如果这样能大幅度地减少程序需要保存的不同类实例的数量,就适合使用享元模式。
享元模式只是用几个对象实例表示程序中的多个不同对象,这些实例通常把相同的基本属性作为内部数据,把少数几个属性作为外部数据,他们通常随类实例表现形式不同而不同。
代理模式
需要将一个复杂的对象或创建时比较花费时间的对象表示成一个简单对象时,可以使用代理模式。
使用代理的场景:
1 调入一个对象需要花费很长时间,如调入一个大图像。
2 计算结果需要花费很长时间才能完成,计算过程中需要显示中间结果。
3 对象位于远程机器上,通过网络调入会很慢,特别是在网络负载高峰期间。
4 对象限制了访问权限,代理可以使访问许可对用户有效。
适配器模式和代理模式都是在对象外围构建一个薄层,但是,适配器是为对象提供一个不同的接口,而代理为对象提供的是相同的接口,该接口可以推迟处理过程或数据转换工作。
装饰模式也具有与它所包含的对象相同的接口,但是它的目标是为原对象添加额外的(有时是可视化的)功能,而代理正好相反,它控制对所包含的类的访问。