设计模式-五大原则
职责单一原则
尽量让每个类只负责软件中的一个功能,并将该功能完全封 装(你也可称之为隐藏)在该类中。
开闭原则
对于扩展,类应该是“开放”的;对于修改,类则应 是“封闭”的。
里氏替换原则
当你扩展一个类时, 记住你应该要能在不修改客户端 代码的情况下将子类的对象作为父类对象进行传递。
接口隔离原则
客户端不应被强迫依赖于其不使用的方法。
依赖倒置原则
高层次的类不应该依赖于低层次的类。 两者都应该依赖于抽象接口。抽象接口不应依赖于具体实现。具体 实现应该依赖于抽象接口。
文章作者: Joohwan.
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Joohwan!
相关推荐

2024-09-01
结构型模式-装饰器模式
结构型模式-装饰器模式什么是装饰器模式装饰是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为 部件(Component)声明封装器和被封装对象的公用接口 具体部件(Concrete Component)类是被封装对象所属的类。 它定义了基础行为,但装饰类可以改变这些行为 基础装饰(Base Decorator)类拥有一个指向被封装对象的引 用成员变量。该变量的类型应当被声明为通用部件接口,这 样它就可以引用具体的部件和装饰。装饰基类会将所有操作 委派给被封装的对象 具体装饰类(Concrete Decorators)定义了可动态添加到部 件的额外行为。具体装饰类会重写装饰基类的方法,并在调 用父类方法之前或之后进行额外的行为 客户端(Client)可以使用多层装饰来封装部件,只要它能 使用通用接口与所有对象互动即可 Example零件接口12345package maintype IPizza interface { getPrice() int} 具体零件12345678package maintype ...

2024-09-01
结构型模式-外观模式
结构型模式-外观模式外观模式外观是一种结构型设计模式, 能为程序库、框架或其他复杂类提供一个简单的接口 外观(Facade)提供了一种访问特定子系统功能的便捷方式, 其了解如何重定向客户端请求,知晓如何操作一切活动部件 创建附加外观(Additional Facade)类可以避免多种不相关 的功能污染单一外观,使其变成又一个复杂结构。客户端和 其他外观都可使用附加外观 复杂子系统(Complex Subsystem)由数十个不同对象构成。 如果要用这些对象完成有意义的工作,你必须深入了解子系 统的实现细节,比如按照正确顺序初始化对象和为其提供正 确格式的数据 子系统类不会意识到外观的存在,它们在系统内运作并且相 互之间可直接进行交互 客户端(Client)使用外观代替对子系统对象的直接调用 Example外观123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package mainimport &...

2024-09-01
结构型模式-代理模式
结构型模式-代理模式什么是代理模式代理是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在 将请求提交给对象前后进行一些处理 服务接口(Service Interface)声明了服务接口。代理必须遵 循该接口才能伪装成服务对象 服务(Service)类提供了一些实用的业务逻辑。 代理(Proxy)类包含一个指向服务对象的引用成员变量。代 理完成其任务(例如延迟初始化、记录日志、访问控制和缓 存等)后会将请求传递给服务对象。通常情况下,代理会对 其服务对象的整个生命周期进行管理 客户端(Client) 能通过同一接口与服务或代理进行交互, 所以你可在一切需要服务对象的代码中使用代理。 Example主体12345package maintype server interface { handleRequest(string, string) (int, string)} 代理12345678910111213141516171819202122232425262728293031323334pac...

2024-09-01
结构型模式-享元模式
结构型模式-享元模式什么是享元模式享元是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中 载入更多对象 享元模式只是一种优化。在应用该模式之前,你要确定程序 中存在与大量类似对象同时占用内存相关的内存消耗问题, 并且确保该问题无法使用其他更好的方式来解决 . 享元(Flyweight)类包含原始对象中部分能在多个对象中共 享的状态。同一享元对象可在许多不同情景中使用。享元中 存储的状态被称为“内在状态”。传递给享元方法的状态被 称为“外在状态“ 情景(Context)类包含原始对象中各不相同的外在状态。情 景与享元对象组合在一起就能表示原始对象的全部状态。 通常情况下,原始对象的行为会保留在享元类中。因此调用 享元方法必须提供部分外在状态作为参数。但你也可将行为 移动到情景类中,然后将连入的享元作为单纯的数据对象 客户端(Client)负责计算或存储享元的外在状态。在客户 端看来,享元是一种可在运行时进行配置的模板对象,具体 的配置方式为向其方法中传入一些情景数据参数 享元工厂(Flywei...

2024-09-01
结构型模式-适配器模式
结构型模式-适配器模式什么是适配器模式适配器是一种结构型设计模式, 它能使接口不兼容的对象能够 相互合作 客户端(Client)是包含当前程序业务逻辑的类 客户端接口(Client Interface)描述了其他类与客户端代码 合作时必须遵循的协议 服务(Service)中有一些功能类(通常来自第三方或遗留系 统)。客户端与其接口不兼容,因此无法直接调用其功能 适配器(Adapter)是一个可以同时与客户端和服务交互的 类:它在实现客户端接口的同时封装了服务对象。适配器接 受客户端通过适配器接口发起的调用,并将其转换为适用于 被封装服务对象的调用。 Example客户端1234567891011package mainimport "fmt"type Client struct {}func (c *Client) InsertLightningConnectorIntoComputer(com Computer) { fmt.Println("Client inserts Lightning connec...

2024-09-01
结构型模式-组合模式
结构型模式-组合模式组合模式组合是一种结构型设计模式, 你可以使用它将对象组合成 树状结构,并且能像使用独立对象一样使用它们 组件(Component)接口描述了树中简单项目和复杂项目所 共有的操作 叶节点(Leaf)是树的基本结构,它不包含子项目。 一般情况下,叶节点最终会完成大部分的实际工作,因为它 们无法将工作指派给其他部分。 容器(Container)——又名“组合(Composite)”——是包含叶 节点或其他容器等子项目的单位。容器不知道其子项目所属 的具体类,它只通过通用的组件接口与其子项目交互。容器接收到请求后会将工作分配给自己的子项目,处理中间 结果,然后将最终结果返回给客户端 客户端(Client)通过组件接口与所有项目交互。因此,客 户端能以相同方式与树状结构中的简单或复杂项目交互 Example组件接口12345package maintype Component interface { search(string)} 组合12345678910111213141516171819package mainimport &...
评论