Tag: design patterns

现在更好的Java单例模式?

您知道,自Java 5发布以来,在Java中编写Singleton模式的推荐方法是使用枚举。 public enum Singleton { INSTANCE; } 但是,我不喜欢这个 – 是强制客户端使用Singleton.INSTANCE来访问单例实例。 也许,更好的方法是在普通类中隐藏Singleton,并提供更好的单例设施访问: public class ApplicationSingleton { private static enum Singleton { INSTANCE; private ResourceBundle bundle; private Singleton() { System.out.println(“Singleton instance is created: ” + System.currentTimeMillis()); bundle = ResourceBundle.getBundle(“application”); } private ResourceBundle getResourceBundle() { return bundle; } private String getResourceAsString(String name) { return bundle.getString(name); } }; […]

控制反转与dependency injection的区别

IoC和DI概念对我来说非常混乱,所以我阅读了很多观点和不同人的post,最后得出结论。 据我了解这些主题是…… 控制反转是java中用于制作松散耦合且更易于维护的应用程序的技术,并且dependency injection是实现该概念(技术)的方式之一。 控件容器的反转在运行时从java类注入依赖关系以使松散耦合的应用程序。 这是真的 ? 如果我错了,请纠正我

如何在考虑可伸缩性和可测试性的同时将域实体正确转换为DTO

我已经阅读了几篇文章和Stackoverflowpost,用于将域对象转换为DTO,并在我的代码中尝试了它们。 在测试和可扩展性方面,我总是面临一些问题。 我知道以下三种可能的解决方案,用于将域对象转换为DTO。 大部分时间我都在使用Spring。 解决方案1:服务层中用于转换的私有方法 第一种可能的解决方案是在服务层代码中创建一个小的“辅助”方法,该方法将检索到的数据库对象转换为我的DTO对象。 @Service public MyEntityService { public SomeDto getEntityById(Long id){ SomeEntity dbResult = someDao.findById(id); SomeDto dtoResult = convert(dbResult); // … more logic happens return dtoResult; } public SomeDto convert(SomeEntity entity){ //… Object creation and using getter/setter for converting } } 优点: 易于实施 没有额外的转换类需要 – >项目不会与实体爆炸 缺点: 测试时出现问题,因为在new SomeEntity()方法中使用了new SomeEntity() ,并且如果对象是深层嵌套的,我必须提供足够的结果when(someDao.findById(id)).thenReturn(alsoDeeplyNestedObject)以避免NullPointers如果转换也解散了嵌套结构 解决方案2:DTO中用于将域实体转换为DTO的附加构造函数 […]

DAO方法的标准命名约定

是否存在DAO方法的标准命名约定,类似于JavaBeans? 例如,我看到的一个命名约定是使用get()返回单个实体而find()返回实体List。 如果没有,你的团队使用的是什么?为什么?

返回NULL的替代方法

/** * Returns the foo with the matching id in this list * * @param id the id of the foo to return * @return the foo with the matching id in this list */ public Foo getFoo(int id) { for (Foo foo : list) { if (foo.getID() == id) { return foo; } } […]

将MVP模式应用于JDialogs

我正在编写一个Swing应用程序,并且在我之前的问题中 ,已经决定使用Model-View-Presenter模式将用户界面与业务逻辑分开。 当我的应用程序启动时,它执行以下代码: Model model = new BasicModel(); Presenter presenter = new Presenter(model); View view = new SwingView(presenter); presenter.setView(view); presenter.init(); 这会创建用户界面。 事件由View生成,并委派给Presenter 。 然后, Presenter操纵Model并相应地更新View 。 为了处理某些事件,我需要从用户那里获得更多信息。 在这些事件的情况下,我认为Swing视图适合生成一个新的JDialog窗口。 一种思路让我觉得这可能是orignal Presenter中的合适代码: public void handlePreferences() { Preferences prefs = view.getPreferences(); model.setPreferences(prefs); } 也就是说,每个JDialog的内容应该表示一个独特的对象,应该从View检索并在Model更新。 但是,这就留下了一个问题:我是否创建了一个新Model来表示Preferences对象,以及一个新的Presenter来表示该JDialog事件处理? 在我看来,如果我想更改UI以使用JSF,那么在原始View中创建一个新的Presenter和Model迫使我做很多工作,如果我想更改UI以使用JSF。 请随时添加评论以便澄清。

Java CLI UI设计:框架或库?

我目前正在开发一个只需要命令行界面的小型实用程序,我开始想知道Java是否提供了创建CLI的任何标准方法,类似于Swing和GUI之类的方式。 我对命令行参数和解析它们并不感兴趣,而是用户与程序使用它进行的基于命令的交互。 这适用于GUI根本不需要或不是使用程序的选项。 谷歌搜索主题只会产生关于如何使用BufferedReader和喜欢与用户进行基本交互的教程,旨在让人们学习Java的基础知识并编写简单的UI,询问名称并打印“Hello World!”。 等等.. 是否有任何库专注于为快速实现更复杂的CLI UI提供良好的框架,或者这是否真的是每个人都以临时方式为自己的实用程序实现的? 也许有人知道在不是一切都是图形的时候创建的实现模式? 这也是有用的资源。

Memento模式与序列化的区别

我正在对Memento模式进行一些研究,我通常对行为模式不熟悉,而且我的研究让我感到非常困惑。 我一直困惑的主要问题之一是Memento Pattern和Serialization之间的差异。 从我可以收集的内容中,两者都可以用来存储物品,并在以后将它们带回来,但我无法找到关于它们之间的主要差异的明确答案,也许我在研究中遗漏了一些东西但我想知道是否有人可以透露两者之间的差异。 谢谢

断路器设计模式实现

我尝试使用Spring框架在Java中实现断路器模式失败了。 如何通过Java和Spring实现断路器模式?

控制器属于Presentation层?

我听说控制器属于表示层。 这怎么可能? 我以为 : 视图用于演示 模型用于业务逻辑 控制器用于控制逻辑 是否有良好的链接来certificate控制器属于表示层? “Spring MVC用于表示层”:我们如何才能在表示层中使用MVC?