覆盖扩展类中的构造函数(装饰器模式)

时间:2015-10-18 20:16:31

标签: java oop decorator

假设我有一个基类抽象类Base,它由类Base1Base2Base 3扩展。它在构造函数中包含一个对象,其中包含我要在装饰器类Decorator1Decorator2中访问的信息。装饰器类扩展Decorator,后者又扩展Base

InfoNeeded i = new InfoNeeded(user_input);
Base a = new Base1(i);
a = new Decorator1(a);
a = new Decorator2(a);
// etc...

我的问题是我需要在i.getSomeValue1()i.getSomeValue2()内访问Decorator1Decorator2等。起初我尝试使用构造函数来抓取我的抽象类i中的Base。然后我在那里实现了所有getSomeValue()函数,因此我可以调用a.getSomeValue()来提取我需要的信息。但是,这会导致问题,因为Decorator扩展了Base,迫使其构造函数接受i而不是a

有没有办法覆盖扩展类中的构造函数,以便它不会被迫接受我不想要的东西?

现在,我将getSomeValue()函数复制并粘贴到我的所有基类和装饰器类中,但是感觉很糟糕。我很想找到避免这种重复的方法。谢谢!

1 个答案:

答案 0 :(得分:0)

答案是否定的,你不能覆盖构造函数。如果父类需要某些东西,则必须使其可用。

但是,你可以拥有多个构造函数,这可能有帮助吗?

关于scala> val o = None scala> (Seq('x' -> 1, 'y' -> 2) ++ o).toMap res2: scala.collection.immutable.Map[Char,Int] = Map(x -> 1, y -> 2) 方法的重复,你能把它放在getSomeValue()类中,以便所有其他人都拥有它吗?