我继承了一些遗留的Java(1.4)代码,这个设计决定定期出现.我无法理解它是否有任何目的或理由.
public interface SoapFacade extends iConfigurable{ }
public class SoapFacadeBase implements SoapFacade{
...
}
public class SoapFacadeImpl extends SoapFacadeBase implements SoapFacade{
...
}
Run Code Online (Sandbox Code Playgroud)
据我了解接口(以及我的实验已经强化),没有任何目的让父和子实现相同的接口.在这种情况下,所有内容都在其中SoapFacade实现SoapFacadeBase,但方法iConfigurable实现于SoapFacadeImpl.但是,这并不需要SoapFacadeImpl实现SoapFacade.
有什么我不知道的接口会给这种模式一些目的或好处吗?除了缺乏清晰度之外,还有潜在的成本会导致重构吗?或者是否应该为了清晰/简单而进行重构?
我正在重新考虑一些继承的代码,但是被设计决定所困扰,并且无法找出适当的条款来谷歌这一点.我的前任会使用像这样的块:
public class ChildClass extends ParentClass {
{
inheritedVar = "someVal";
}
public ChildClass(){ /* constructor exists */ }
// rest of code
}
Run Code Online (Sandbox Code Playgroud)
声明没有关键字的代码块有什么意义?它不像静态块,我不相信.它是在构造函数中设置的替代方法吗?如果使用工厂(在这种情况下不是这样),这会产生一些影响吗?我在C中发现了一个相关的线程,但是推理(范围和变量声明)似乎与Java无关.
关于"为什么"的任何想法或想法将不胜感激.这很容易重新考虑这一点,我只是好奇这一点.
我正在编写一个非常奇怪的ANT任务.我尝试了各种谷歌搜索没有明确的答案.
我在ANT中有一个调用javac命令的编译目标:
<target name="compile">
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}:${unittest.src.dir}" destdir="${classes.dir}">
<classpath refid="classpath" />
<exclude name="**/plugins/**" />
<exclude name="**/outbound/**" />
</javac>
</target>
Run Code Online (Sandbox Code Playgroud)
这不会产生任何错误,但是当我使用-verbose和-debug标记运行ant时,我在日志中得到以下内容:
[javac] package/MyClass.java added as package/MyClass.class doesn't exist
Run Code Online (Sandbox Code Playgroud)
所以这不是错误的,但它给了我这个奇怪的结果(最后附加了"不存在").显然这会导致后来的目标在尝试运行类时失败(在本例中,我的junit目标).
Web搜索似乎表明我要么丢失了一个java_home env变量,要么就是在某个地方存在版本问题(当javac上的source属性设置时,这个错误往往会发生,但我删除了它,但仍然得到了奇怪的结果).我相信我们已经涵盖了这些可能性.
对此的任何想法或建议都会很精彩.谢谢.
早上好,
我在工作中继承了一些遗留代码,它使用了一种相当不寻常的设计模式.我在论坛上找到的类似模式的唯一参考就在这里.情况是原始设计者有一个通用的父类(非抽象),它有一个直接引用子类的静态工厂方法.
以下是遗留代码中的几个位置的编码样式示例:
public static LoggerFactory getLoggerFactory(LogType type) {
switch (type) {
case LOG4J:
return Log4JLoggerFactory.getInstance();
case LOGBACK:
return LogBackLoggerFactory.getInstance();
default:
throw new RuntimeException("No logger factory defined for type " + type);
}
}
Run Code Online (Sandbox Code Playgroud)
Log4JLoggerFactory和LogBackLoggerFactory扩展LoggerFactory的位置.
这对我来说真的很陌生,但在我重新考虑代码之前,这个设计模式是否有任何目的或好处(甚至还有正式名称)?
任何想法或建议表示赞赏.谢谢!
编辑:在阅读了Yishai的回复后,我想我会在维基百科的战略模式文章中加入一个链接,以便于参考.感谢大家的回复!
我正在构建一个monorepo,它将包含使用React构建的UI工具包的所有单个组件。
我使用lerna是因为我没有Monorepo / multi软件包配置的经验,现在我具有以下结构:
index.js
packages/
pack1/
pack2/
Run Code Online (Sandbox Code Playgroud)
我想使用构建每个软件包,webpack但只想webpack.config.js在根文件夹中使用一个,并使用单个命令来创建一个pack*.dist.js在每个软件包目录中。
可能吗?有方向吗?