Tag: 设计模式

这是哪种单身人士?

public class ConnectionManager { private static Map managerInstances = new HashMap(); private String dsKey; private ConnectionManager(String dsKey){ this.dsKey = dsKey; } public static ConnectionManager getInstance(String dsKey){ ConnectionManager managerInstance = managerInstances.get(dsKey); if (managerInstance == null) { synchronized (ConnectionManager.class) { managerInstance = managerInstances.get(dsKey); if (managerInstance == null) { managerInstance = new ConnectionManager(dsKey); managerInstances.put(dsKey, managerInstance); } } } […]

寻求更好的设计与java进行多调度

在不支持多个调度的语言(例如Java)中,代码可能看起来像这样 /* Example using run time type comparison via Java’s “instanceof” operator */ interface Collideable { void collideWith(Collideable other); } class Asteroid implements Collideable { public void collideWith(Collideable other) { if (other instanceof Asteroid) { System.out.println(“AAAAAA”); } else if (other instanceof Spaceship) { System.out.println(“BBBBBB”); } else if (other instanceof Plane) { System.out.println(“CCCCCCC”); } } } […]

使用许多子类重构抽象Java类

我正在寻找关于重构这种情况的最佳方法的想法(更好的设计,最小的努力)。 从以下示例开始抽象类(实际有更多字段,方法和抽象方法): abstract class Car { private int manufactureYear; // … many more fields that are hard to clone public Car(int manYear) { this.manufactureYear = manYear; } abstract public Color getColor(); abstract public int getNumCylinders(); } 有很多子类(比如100)扩展了这个类。 这些儿童课程被认为是汽车的“规格”。 以下是两个例子: class CarOne extends Car { private static Color COLOR = Color.Red; private static int CYLINDERS = […]

如何设计可能使用skip的返回流

我创建了一个解析库,它接受提供的输入并返回记录流。 然后程序调用该库并处理结果。 就我而言,我的程序正在使用类似的东西 recordStream.forEach(r -> insertIntoDB(r)); 可以提供给解析库的输入类型之一是平面文件,其可以具有标题行。 因此,可以将解析库配置为跳过标题行。 如果配置了标题行,则会向返回添加skip(n)元素,例如 Files.lines(input)**.skip(1)**.parallel().map(r -> createRecord(r)); 解析库返回生成的Stream。 但是,似乎skip,parallel和forEach不能很好地结合在一起最终程序员必须调用forEachOrdered,但将这个要求放在程序员身上是不好的设计,期望他们知道如果处理输入类型他们必须使用forEachOrdered带有标题行的文件。 如何在返回的流链的构造中自己强制执行有序需求,以将完整function的流返回给程序编写器,而不是具有隐藏限制的流? 答案是将流包装在另一个流中吗?

如何使用MVC在CardLayout中的JPanel之间切换?

我正在制作数学游戏应用程序,最近开始实施MVC。 我有以下结构: auiAs2 MigJPanel :扩展JPanel ScreenInterface.java :包含全局变量,字体和难度enum MathsGame.java :扩展JFrame auiAs2.view DiffView.java :扩展MigJPanel实现ScreenInterface MigJPanel :扩展MigJPanel实现ScreenInterface EndGameView.java:扩展MigJPanel实现ScreenInterface auiAs2.controller DiffControl.java GameControl.java EndGameControl.java auiAs2.model Model.java :实现ScreenInterface 我的MathsGame.java包含一个设置为CardLayout的JPanel ,其中添加了DiffView , EndGameView和EndGameView实例。 当我运行程序时,会向用户显示diffView ‘卡’。 如果用户单击“新游戏”,则DiffControl.java的ActionListener DiffControl.java获得所选的难度。 public class DiffControl { private DiffView diffView; private Model model; public DiffControl(DiffView diffView, Model model) { this.diffView = diffView; this.model = model; this.diffView.addNewGameListener(new NewGameListener()); } […]

将大型XML文档从一种格式转换为另一种格式的最快速最佳方法

我有一堆大型XML文件(所有文件的总大小超过1 GB),我需要将它们从供应商模式转换为我们的模式。 供应商在其服务器上的某个FTP位置有一个ZIP文件(它包含大型XML文件)。 我必须选择该ZIP文件,然后转换所有可用的XML文件。 转换为我们的架构格式后,我需要将数据保存在数据库中。 实现这个的好设计是什么? 什么是支持Java的相关工具和实用程序?

网络协议的设计模式?

所以我正在构建一个相当简单的文件传输服务器/客户端,但很难找到一个好的设计来处理协议中的不同命令和状态。 假设您有3个不同的命令upload , remove , download ,您可以使用3个不同的if语句,并使用额外的if语句跟踪状态,但这不会扩展并且无法维护。 责任链设计模式可用于连续的东西,如加密和压缩,但它不会处理命令的逻辑。 我知道这是一个相当广泛的问题,但有人有任何建议吗?

使用Java在Java数据库应用程序中设计模式(Java EE / Java SE)

我现在已经阅读了StackOverflow很长一段时间了,现在我只是怀疑地问一个问题。 我今年20岁,目前在我的家乡(罗马尼亚克卢日纳波卡)就读于大学。 足以介绍:D。 基本上我有我的小软件公司提供簿记appz。 它们(可怕地)用Delphi编写,我想从头开始用Java编写它们。 我以前对Java的经验不多,但我想学习并且因为平台提供的廉价和高质量的工具而选择了Java。 现在,请您指出正确的方向,我可以在哪里找到一些完整的文档(书籍,网站,博客等),以获取正确构建数据库应用程序的一些信息,包括使用DB的设计模式(我的选择是PostgreSQL和已经订购了一本书)和Java。 我知道我第一次无法做到正确,但至少要接近正确。 谢谢

使用SQLite处理POJO的DAO创建的更好模式

我正在开发一个使用SQLCipher的Android应用程序, 用于Android的ORMLite处理与SQLite和Jackson进行解析的POJO存储。 我想知道是否会有一个更好的模式,我正在使用(由stayforit推荐)获得对应于给定的实体类的DAO。 我有超过30个实体类,我不断添加一些时间,每次,我必须创建一个看起来与前一个完全相同的DAO类。 我如何使用generics类进行推广? 这是我的DbManager类: public class DbManager { private static DbManager instance; private CipherDbHelper dbHelper; private SecureSharedPreferences settings; private DbManager() { } private DbManager(Context context, String password) { SQLiteDatabase.loadLibs(context); dbHelper = new CipherDbHelper(context, password); } public static void init(Context context, String password) { instance = new DbManager(context, password); } public static DbManager getInstance() […]

两个共享共同function的活动

我有两个活动: AddContact和EditContact 。 它们共享许多常见的实例变量和作用于该数据的方法。 重构此代码的最佳方法是什么,以便不会有任何重复的代码? 您能推荐使用任何特定的设计模式吗? 最明显的当然是inheritance,但由于android中的每个活动都已经扩展了Activity ,这是不可能的。 我已经想过创建另一个扩展Activity类,然后将公共变量和方法放在这个类中,然后在AddContact和EditContact初始化这个类。 但是,如果这确实是最好的方法,我应该将此共享类中的所有方法和实例变量设为静态吗? 非常感谢您的宝贵时间。