Tag: 装饰

装饰图案与多个generics

我目前正在做一些代码重构。 所以我想通过decorator设计替换现有的inheritance设计。 但我正在努力解决多种仿制药(可能根本不可能)。 我现在有上面的设计。 有一个IConstraint可以根据实现的约束来check sa类。 这些约束的具体实现是SimpleConstraintA和SimpleConstraintB ,它们都检查来自ClassA一些值。 Decorator增强了约束,例如,当指定值不在范围内时,有一些约束不应该被检查。 ClassA实现接口IA和IB以便DecoratorA和DecoratorB可以使用它。 设计的用法如下: Test classToCheck = new Test(“test”); IConstraint constraint = new DecoratorA(new DecoratorB(new SimpleConstraint())); boolean value = constraint.check(classToCheck); 所以我想要的是使用具有不同数量的输入参数和不同类型的代码。 喜欢: Test classToCheckA = new Test(“testA”); Test classToCheckB = new Test(“testB”); IConstraint constraint = new DecoratorA(new DecoratorB(new SimpleConstraint())); boolean value = constraint.check(classToCheckA, classToCheckB); 要么: Test classToCheckA = […]

将装饰器设计模式用于类的层次结构

查看以下(简化)类的层次结构: > Email (base class) > SimpleEmail extends Email > HtmlEmail extends Email 我需要修饰Email.send()来添加限制function。 我需要实例化SimpleEmail,HtmlEmail或其他类似的Email子类。 这个模式到底应该是什么样的? 我的猜测(需要纠正)如下: class abstract EmailDecorator -> Define a constructor: EmailDecorator(Email component) -> Implements all methods of Email and passes values through to component -> Adds functionality to send() method class SimpleEmailDecorator extends EmailDecorator -> Define a constructor: SimpleEmailDecorator(SimpleEmail component) -> […]

使用inheritance与接口的装饰器设计模式

我想使用inheritance( Decorator extends Component )实现Decorator设计模式,因为我需要访问Component类的受保护字段/方法。 问题是Component类表示一个算法,它在构造时执行一些预处理并保存大量数据。 现在每次我要装饰一个组件时,我都会创建一个新的Decorator实例,这个实例需要构建一个新的(无用的)Component实例来执行不需要的计算并保存不需要的数据。 我想使用接口而不是inheritance,但后来我无法访问Component的受保护信息。 在扩展Component类时,我是否担心浪费资源? 如果是这样,我怎样才能避免它而不会失去对我所需信息的访问权限? 最后一点说明:我可以创建Decorator实例,为其提供“虚拟”数据,这样它将执行最少量的计算,但这个解决方案感觉很乱。 谢谢。

IntelliJ可以自动创建装饰器类吗?

有时,我创建一个这样的装饰器类: class MyInterfaceDecorator implements MyInterface { private final MyInterface delegate; … constructor taking a MyInterface instance … @Override public Object someInterfaceMethod(Some argument) { return delegate.someInterfaceMethod(argument); } … etc, more methods here… } IntelliJ可以自动为我创建这个课程吗?

缺少Java方法(ala Ruby)进行装饰?

Java中是否有任何可用于拦截消息(方法调用)的技术,如Ruby中的method_missing技术? 这将允许非常容易地编码装饰器和代理,就像在Ruby中一样: :Client p:Proxy im:Implementation ——- ———- —————– p.foo() ——-> method_missing() do_something im.foo() ——————> do_foo p.bar() ——–> method_missing() do_something_more im.bar() ——————-> do_bar (注意:代理只有一种方法:method_missing())

如何从Java中的Decorator Pattern中删除装饰对象

我正在读“傻瓜设计模式”。 我阅读并练习了装饰模式。 使用Decorator Pattern,我们可以用任何东西装饰一个对象。 现在,我想在装饰之前删除装饰对象。我已经通过ArrayList解决了这个问题,但我仍觉得它不好。 你能告诉我如何删除装饰物吗? 什么是更好的方法? 这是我的方式: Computer.java public class Computer { public Computer() { } public String description() { return “computer”; } } ComponentDecorator.java public abstract class ComponentDecorator extends Computer { @Override public abstract String description(); } CD.java public class CD extends ComponentDecorator { private Computer computer; public CD() { } public CD(Computer […]

Servlet页面修饰:人们是否使用Tiles,Sitemesh或其他东西?

我已经使用了Tiles和Sitemesh多年,虽然我个人更喜欢Sitemesh风格的页面装饰,但我通常没有在互联网上看到很多关于Sitemesh或Tiles的提及。 人们是否积极使用Tiles和/或Sitemesh,还是有其他图书馆以这种身份接管?

为什么我们需要装饰器设计模式中的装饰器?

假设我有一个名为A的类,我想使用装饰器设计模式。 如果我错了,请纠正我,但为了工作,我们需要创建一个装饰器类,比如ADecorator ,它将保存对A实例的引用,所有其他装饰器将扩展它以添加function。 我不明白为什么我们必须创建一个装饰器类,而不是使用A实例?