当前位置: 首页 > 知识库问答 >
问题:

CDI:与经典装饰器模式相比,@decorator在实际项目中有用吗

单于旭东
2023-03-14
Env:
   Wildfly 9.0.1
   Weld 2.2.14

我目前正在研究在合理的情况下在我们的遗留代码库中使用CDI@decorator的可能性。

查看规范和java EE7示例,CDI@decorators似乎是

    null

勒凯什

共有1个答案

赵越
2023-03-14

您问与手工编写的经典装饰模式相比,CDI提供了什么。不多。仅限:

  • 保证注入的bean已自动“修饰”
  • 允许您跳过覆盖修饰接口中的每个方法

顺便说一句,澄清一下,你说:

public class CraftedEntityManager implements EntityManager {

    private final EntityManager delegator;

    public CraftedEntityManager(EntityManager em) {
        this.delegator = em;
    }

    @Override
    public void persist(Object entity) {
        delegator.persist(entity);
    }

    @Override
    public <T> T merge(T entity) {
        return delegator.merge(entity);
    }

    @Override
    public void remove(Object entity) {
        delegator.remove(entity);
    }

    // ...
    // here goes almost 50 other methods of the EntityManager

}

所以它似乎是一个很好的用例。

 类似资料:
  • 装饰者模式可以动态的给指定的类添加一些行为和职责,而不用对原代码进行任何修改。当你需要使用子类的时候,不妨考虑一下装饰者模式,可以在原始类上面封装一层。 在 Swift 里,有两种方式实现装饰者模式:扩展 (Extension) 和委托 (Delegation)。

  • 装饰器模式允许用户在不改变其结构的情况下向现有对象添加新功能。 这种类型的设计模式属于结构模式,因为此模式充当现有类的包装器。 此模式创建一个装饰器类,它包装原始类并提供其他功能,使类方法签名保持不变。 我们通过以下示例演示装饰器模式的使用,其中我们将使用一些颜色装饰一个没有改变形状类的形状。 实现 (Implementation) 我们将创建一个Shape接口和实现Shape接口的具体类。 然后

  • 本文向大家介绍C#装饰器模式(Decorator Pattern)实例教程,包括了C#装饰器模式(Decorator Pattern)实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式详细讲述了C#装饰器模式的实现方法。分享给大家供大家参考。具体实现方法如下: 现假设有一个公司要做产品套餐,即把不同的产品组合在一起,不同的组合对应不同的价格。最终呈现出来的效果是:把产品组合的所有元素

  • 委托 装饰者模式的另一种实现方案是委托。在这种机制下,一个对象可以和另一个对象相关联。比如你在用 UITableView ,你必须实现 tableView(_:numberOfRowsInSection:) 这个委托方法。 你不应该指望 UITableView 知道你有多少数据,这是个应用层该解决的问题。所以,数据相关的计算应该通过 UITableView 的委托来解决。这样可以让 UITable

  • 扩展 扩展是一种十分强大的机制,可以让你在不用继承的情况下,给已存在的类、结构体或者枚举类添加一些新的功能。最重要的一点是,你可以在你没有访问权限的情况下扩展已有类。这意味着你甚至可以扩展 Cocoa 的类,比如 UIView 或者 UIImage 。 举个例子,在编译时新加的方法可以像扩展类的正常方法一样执行。这和装饰器模式有点不同,因为扩展不会持有扩展类的对象。

  • 本文向大家介绍学习php设计模式 php实现装饰器模式(decorator),包括了学习php设计模式 php实现装饰器模式(decorator)的使用技巧和注意事项,需要的朋友参考一下 动态的给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活【GOF95】 装饰模式是以对客户透明的方式动态地给一个对象附加上更多的职责。这也就是说,客户端并不会觉得对象在装饰前