多个接口以Java扩展
我需要在Java中实现具有多个接口inheritance的Facade设计模式,或者是具有Bridge设计模式的正确Facade。 我知道这是可能的,因为我把它作为一个系统的一部分看到了,但我不太清楚它的实现。
这是我到目前为止的实现:
public interface IOne { public void methodOneIOne(); public void methodTwoIOne(); }
它的实施:
public class One implements IOne { @Override public void methodOneIOne() { System.out.println("methodOneIOne()"); } @Override public void methodTwoIOne() { System.out.println("methodTwoIOne()"); } } public interface ITwo { public void methodOneITwo(); public void methodTwoITwo(); } public class Two implements ITwo { @Override public void methodOneITwo() { System.out.println("methodOneITwo()"); } @Override public void methodTwoITwo() { System.out.println("methodTwoITwo()"); }}
门面:
public interface IFacade extends IOne, ITwo {}
所以,从这里我不知道去哪里。 如果我创建一个实现IFacade的类,那么它将需要实现所有方法,这不是我想要的。
你真的想用你的门面课做什么? 如果您只是尝试传递大多数方法,可能会修改一些,那么动态代理可能就是您想要的。
否则你实际上必须实现IFacade
所有方法,因为Java不允许你使用多重inheritance,因此你无法扩展One
和Two
。
如果我创建实现IFacade的类,那么如果需要实现所有方法,这不是我想要的。
为什么不? 你想要Facade做什么?
正如所写的那样,Facade的实现必须实现所有方法,但这并不意味着重复你为One和Two编写的所有代码。 只需使用组合:
public class Facade implements IFacade { private IOne one; private ITwo two; public Facade(IOne one, ITwo two) { this.one = one; this.two = two; } @Override public void methodOneIOne() { this.one.methodOneInOne(); } // You see the point, I hope. }
此设计的另一个好处是允许您随意更改Facade的实现:只需替换每个接口的不同实现。 这些可以是动态生成的代理或您可以想到的任何其他内容。 这就是设计界面的美妙之处。
- VelocityEngineUtils已经在Spring 3.2中删除了,还有什么可以使用的?
- JAVA NIO Bytebuffer.allocateDirect()对int的大小限制
- java编译器如何查找类文件而classpath未设置为jdk路径?
- 创建名为’sessionFactory’的bean时出错:MalformedParameterizedTypeException
- 创建一个JsonProcessingException
- 退役的mvn eclipse相当于什么:m2e中的eclipse?
- 将管道插入Java Pattern表达式的正确方法是什么?
- 我如何以编程方式从被动嗅探中收集数据包?
- jackson在反序列化时抛出JsonMappingException; 要求单串构造函数?