草庐IT

设计模式详解之结构型设计模式——适配器、装饰器

结构型设计模式创建型设计模式主要是为了解决创建对象的问题,而结构型设计模式则是为了解决已有对象的使用问题。适配器模式适配器模式比较好理解,因为在我们的日常生活中就很常见,如耳机转换线、充电器适配器、插座等,举个最常见的例子:插座就是个适配器,将一个接口扩展为多个接口,将墙上的双孔接口转换为三孔接口。而这也就是适配器的作用:将一个接口转换为用户期望的另一个接口。适配器的使用场景:需要使用第三方SDK的核心功能,但其接口或者功能不符合需求,这时可以使用适配器对其进行兼容和扩展随着业务发展,旧接口已经不能满足需求,但重写代价又太大,这时可以使用适配器对接口功能进行扩展注意:适配器是对已有资源进行兼容

结构型:七. 享元模式

享元模式是什么享元模式:是一种结构型设计模式,它允许你在消耗少量的内存的情况下支持大量的对象。享元模式通过共享多个对象的部分状态来实现上述功能。即是享元模式会将不同对象的相同功能缓存以节省内存。为什么用享元模式如果程序中有很多相似对象,这时候你就可以用享元模式来节约内存。享元模式怎么实现这里用dressFactorySingleInstance这个包常量来保存dress,用dressMap的key来对不同的dress分类。这个例子就是在这里达到共享的功能,因为无论多少玩家,而dress只有两类。所以无论多少玩家,dressFactorySingleInstance中的dress只有两个key,

结构型:七. 享元模式

享元模式是什么享元模式:是一种结构型设计模式,它允许你在消耗少量的内存的情况下支持大量的对象。享元模式通过共享多个对象的部分状态来实现上述功能。即是享元模式会将不同对象的相同功能缓存以节省内存。为什么用享元模式如果程序中有很多相似对象,这时候你就可以用享元模式来节约内存。享元模式怎么实现这里用dressFactorySingleInstance这个包常量来保存dress,用dressMap的key来对不同的dress分类。这个例子就是在这里达到共享的功能,因为无论多少玩家,而dress只有两类。所以无论多少玩家,dressFactorySingleInstance中的dress只有两个key,

结构型:六. 组合模式

组合模式是什么组合模式:是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。为什么用组合模式如果你需要实现树状对象结构,可以使用组合模式。确保应用的核心模型能够以树状结构表示。尝试将其分解为简单元素和容器。记住,容器必须能够同时包含简单元素和其他容器。组合模式怎么实现这里是模拟搜索文件夹和文件,文件夹里面有文件夹和文件。组成一个树状的结构。folder.gopackagecompositeimport"fmt"typecomponentinterface{search(string)}typefolderstruct{components[]compone

结构型:五. 桥接模式

桥接模式是什么桥接模式:桥接是一种结构型设计模式,可将业务逻辑或一个大类拆分为不同的层次结构,从而能独立地进行开发。为什么用桥接模式对于两个独立变化的维度,使用桥接模式再适合不过了.桥接模式怎么实现这里是将computer和printer分成两层,用接口的方式把强耦合转化为弱耦合。这两个层次可通过桥接进行沟通,其中抽象层(computer)包含对于实施层(printer)的引用。抽象层和实施层均可独立开发,不会相互影响。computer.gopackagebridgeimport"fmt"typecomputerinterface{print()setPrinter(printer)}type

结构型:四. 代理模式

代理模式是什么代理模式是一种结构型设计模式,让你能提供真实服务对象的替代品给客户端使用。代理接收客户端的请求并进行一些处理(访问控制和缓存等),然后再将请求传递给服务对象。为什么用代理模式在某些情况下客户类不想或者不能访问目标对象,这时候就可以使用代理类访问。代理模式怎么实现packageproxy//代理模式typeSubjectinterface{Do()string}typeRealSubjectstruct{}func(RealSubject)Do()string{return"real"}typeProxystruct{realRealSubject}func(pProxy)Do()

结构型:六. 组合模式

组合模式是什么组合模式:是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。为什么用组合模式如果你需要实现树状对象结构,可以使用组合模式。确保应用的核心模型能够以树状结构表示。尝试将其分解为简单元素和容器。记住,容器必须能够同时包含简单元素和其他容器。组合模式怎么实现这里是模拟搜索文件夹和文件,文件夹里面有文件夹和文件。组成一个树状的结构。folder.gopackagecompositeimport"fmt"typecomponentinterface{search(string)}typefolderstruct{components[]compone

结构型:五. 桥接模式

桥接模式是什么桥接模式:桥接是一种结构型设计模式,可将业务逻辑或一个大类拆分为不同的层次结构,从而能独立地进行开发。为什么用桥接模式对于两个独立变化的维度,使用桥接模式再适合不过了.桥接模式怎么实现这里是将computer和printer分成两层,用接口的方式把强耦合转化为弱耦合。这两个层次可通过桥接进行沟通,其中抽象层(computer)包含对于实施层(printer)的引用。抽象层和实施层均可独立开发,不会相互影响。computer.gopackagebridgeimport"fmt"typecomputerinterface{print()setPrinter(printer)}type

结构型:四. 代理模式

代理模式是什么代理模式是一种结构型设计模式,让你能提供真实服务对象的替代品给客户端使用。代理接收客户端的请求并进行一些处理(访问控制和缓存等),然后再将请求传递给服务对象。为什么用代理模式在某些情况下客户类不想或者不能访问目标对象,这时候就可以使用代理类访问。代理模式怎么实现packageproxy//代理模式typeSubjectinterface{Do()string}typeRealSubjectstruct{}func(RealSubject)Do()string{return"real"}typeProxystruct{realRealSubject}func(pProxy)Do()

(Java)设计模式:结构型

前言这篇博文续接的是UML建模、设计原则、创建型设计模式、行为型设计模式,有兴趣的可以看一下3.3、结构型这些设计模式关注类和对象的组合。将类和对象组合在一起,从而形成更大的结构*3.3.1、proxy代理模式定义:为某对象提供一种代理以控制对该对象的访问。即:客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性适用场景:想在访问某个类时做一些操作代理模式分为静态代理和动态代理3.3.1.1、静态代理定义:静态的定义代理类,编译前定义好静态代理的角色:抽象角色:真实角色的抽象化,抽象类或接口均可真实角色:被代理者,也是真正完成业务服务功能的地方代理角色:代理真实角色,间接访问真