【发布时间】:2023-03-16 11:09:01
【问题描述】:
我可以重复使用装饰器吗?
我有一个ClientDecorator 来装饰一个具有客户端引用的实体,这个装饰器在调用 getClient 时获取数据库上的客户端(在它被装饰之前,此方法返回 clientId,修饰后返回一个Client的实例)。
好的,但是,我还有一些其他实体可以使用相同的装饰器进行装饰,例如,我有另一个名为 questions 的表,该表有一个指向已提出问题的客户的引用,并且我有另一个名为 schedules 的表,其中包含一个客户端的引用。
顺便说一句,我可以用ClientDecorator装饰question和schedule。
但是,我也有一个QuestionDecorator;这家伙装饰了Answer等。
如何进行这种抽象,以便我可以随时重用装饰器?
我尝试创建ClientDecorable、QuestionDecorable 接口,但没有任何进展。
【问题讨论】:
-
你需要定义接口。就像你写的一样。您的装饰器将只接受实现已定义接口的组件。这是要走的路。发布您拥有的代码。
-
给我一个例子@busypeoples
-
你有没有注意到
*Decorator对于装饰者来说是个坏名字?你应该给事物起描述性的名字......如果我们不知道你的装饰器会改变哪些功能,很难说你能做什么或不能做什么...... -
@HenriqueBarcelos,在这种特定情况下,它正在装饰一个实体,例如:问题,->getClient ...它返回客户端ID,真的吗?装饰后,返回对应客户端的实例。
-
但是你的装饰器改变了什么?
标签: php mysql oop design-patterns decorator