设计模式
子知识库
文章
5.1 Dynamic Property(动态属性)
索引 别名 意图 结构 参与者 适用性 效果 实现 实现方式(一):Dynamic Property 的示例实现。 别名 Property Properties Property List 意图 使对象可以为客户提供广泛且可扩展的属性集合。 Lets an object provides a generic and extensible set of properties to clients. 结构 参与者 Object 目标对象可存储 Property 列表。 可使用不同的类型来作为 Property 的标识符,最简单的可以使用 string 类型。 Property 属性定义。 适用性 当以下情况成立时可以使用 Dynamic Property 模式: 当对象需要定义大量属性时。 当对象的属性是运行时可变时。 效果 可在运行时动态的修改对象的属性。 实现 实现方式(一):Dynamic Property 的示例实现。 复制代码 1 namespace DynamicPropertyPattern.Implement...
5.2 Extension Object(扩展对象)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):使用示例结构实现 Extension Object。 实现方式(二):使用泛型实现 IExtensibleObject<T> 接口。 意图 预期对象的接口将在未来被扩展。通过额外的接口来定义扩展对象。 Anticipate that an object’s interface needs to be extended in the future. Additional interfaces are defined by extension objects.. 结构 参与者 Subject 定义抽象主体对象。其定义用于查询是否包含特定扩展的接口。 Extension 所有扩展类的抽象基类。可以定义负责管理扩展自身的操作。 Extension 知道其是谁的扩展。 ConcreteSubject 具体的主体类。实现基类定义的 GetExtension 方法并返回相应的扩展对象。 AbstractExtension 特定种类的扩展类的抽象基类。 Concre...
5.3 Manager(管理器)
索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现。 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中。 这使得管理职责的变化独立于类本身,并且管理器还可以为不同的类进行重用。 Encapsulates management of a class’s objects into a separate manager object. This allows variation of management functionality independent of the class andthe manager’s reuse for different classes. 结构 参与者 Subject 领域对象。 提供 Client 需要的领域服务。 Manager Manager 类是唯一负责创建和销毁 Subject 对象的类。它负责跟踪和管理 Subject对象。 典型的管理职责包括根据指定的 Key 搜索 Subject 对象。 因为 Subject 对 Manager 无引用,所以 Man...
5.4 Object Pool(对象池)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):实现 DatabaseConnectionPool 类。 实现方式(二):使用对象构造方法和预分配方式实现 ObjectPool 类。 意图 运用对象池化技术可以显著地提升性能,尤其是当对象的初始化过程代价较大或者频率较高时。 Object pooling can offer a significant performance boost; it is most effectivein situations where the cost of initializing a class instance is high, the rateof instantiation of a class is high. 结构 参与者 Reusable 类的实例与其他对象进行有限时间的交互。 ReusablePool 管理类的实例。 Client 使用类的实例。 适用性 当以下情况成立时可以使用 Object Pool 模式: 类的实例可重用于交互。 类的实例化过程开销较大。 ...
5.5 Private Class Data(私有类数据)
索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):实现对初始化数据的封装。 意图 封装类的初始化数据,控制对类的属性的更改,并保持类数据与使用数据的方法间的隔离。 Encapsulate class data initialization, control write access to class attributesand separate data from methods that use it. 结构 参与者 MainClass 根据构造函数参数列表构造 DataClass 类的实例。 DataClass 封装数据。 适用性 当以下情况成立时可以使用 Private Class Data 模式: 类的初始化数据是一次性的不可修改的数据。 需要控制对类的初始化数据的更改。 预防对初始化数据的不必要的更改。 效果 减少类对外暴露的属性。 从类中移除了对数据的写权限。 实现 实现方式(一):实现对初始化数据的封装。 复制代码 1 namespace PrivateClassDataPattern.Implement...
5.6 Product Trader(操盘手)
设计模式之美:Product Trader(操盘手) 索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Product Trader 的示例实现。 意图 使客户程序可以通过命名抽象超类和给定规约来创建对象。 Product Trader 让客户程序与 Product类解耦,从而使得类的层级结构、框架和应用程序易于改写、配置和演进。 Let clients create objects by naming an abstract superclass and by providing aspecification. A Product Trader decouples the client from the product and thereby eases theadaption, configuration and evolution of class hierarchies, frameworks andapplications. 结构 参与者 Client 为 ConcreteProduct 类创建 Specification。...
5.7 Role Object(角色对象)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Role Object 的示例实现。 意图 通过明确地附加角色对象到目标对象中,以使对象可以适配不同的客户需求。每个角色对象都代表着目标对象在客户上下文中的一种角色。每种上下文都存在于特定的应用程序中,因此可使对象在不同的应用程序间解耦。 Adapt an object to different client’s needs through transparently attached roleobjects, each one representing a role the object has to play in that client’scontext. Each context may be its own application, which therefore gets decoupledfrom the other applications. 结构 参与者 Component 定义关键的抽象接口。 定义添加、删除、测试和查询角色对象的接口协议。Client 可以指定...
5.8 Type Object(类型对象)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Type Object 的经典介绍。 实现方式(二):Type Object 在游戏设计中的使用。 意图 允许在运行时动态灵活的创建新的 “类”,而这些类的实例代表着一种不同的对象类型。 Allow the flexible creation of new “classes” by creating a single class, eachinstance of which represents a different type of object. 结构 Type Object模式包含两个具体类。一个用于描述对象,另一个用于描述类型。每个对象都包含一个指向其类型的指针。 参与者 TypeClass 是 TypeObject 的种类。 每个种类都会有一个单独的类。 TypeObject 是 TypeClass 的实例。 代表着一种对象。定义一种对象所包含的属性和行为。 适用性 当以下情况成立时可以使用 Type Object 模式: 类的实例需要根据它们的通用属...
5.9 订阅发布模式(事件驱动)
事件驱动和订阅发布模式1 事件驱动/订阅发布模式 参考文献:https://blog.csdn.net/weixin_46058921/article/details/126978976 简介事件驱动一个常见的形式就是 发布-订阅 模式,在跨进程的通信间,我们常常使用 消息队列 来实现消息的发布订阅。目前主流的框架中,均采用消息的 发布-订阅 模式来进行大型分布式项目的解耦。使得数据生产方和发送方分离,同时 MQ 还能起到削峰的作用。同一进程内很多时候也需要这种事件驱动机制来进行解耦 原理事件机制主要由三个部分组成:事件源、事件对象、监听器 事件源(订阅发布模式中的发布者):事件发生的起源 事件对象(观察者模式中的主题):事件实体,事件对象会持有一个事件源 监听器(观察者模式中的观察者、订阅发布模式中的订阅者):监听事件对象,对事件对象进行处理 事件分发器(复杂事件模型中负责将将事件源发出的时间触发订阅者的行为,决定了是同步行为还是异步行为) 2 Java事件驱动Java 提供了关于事件相关的两个接口: EventObject:事件对象,自定义事件需要继承该类 ...














