天天看点

go中设计模式之结构型模式

定义内部模块

定义对外交互接口及实现

当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。

客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。

在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。

对客户屏蔽子系统组件

定义被适配的接口和实现

定义目标接口和实现,并且实现接口由被适配接口创建

系统需要使用现有的类,而这些类的接口不符合系统的需要。

将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码。

定义组件

定义装饰对象

使用装饰对象生成组件

在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的装饰器,从而实现不同的行为。

定义享元对象

定义享元工厂

使用享元工厂创建

一个系统有大量相同或者相似的对象,由于这类对象的大量使用,造成内存的大量耗费。

对象的大部分状态都可以外部化,可以将这些外部状态传入对象中。

使用享元模式需要维护一个存储享元对象的享元池,而这需要耗费资源,因此,应当在多次重复使用享元对象时才值得使用享元模式。

享元模式从对象中剥离出不发生改变且多个实例需要的重复数据,独立出一个享元,使多个对象共享,从而节省内存以及减少对象数量。

定义接口

定义实现对象

定义代理实现对象

并由代理对象控制对原对象的引用,增加请求注入劫持

代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。

继续阅读