Tag: 设计模式

Java EE组件之间的通知

我有设计问题。 我的应用程序有多个Java EE组件,简单来说,一个充当服务提供者(非UI),另一个充当消费者(UI webapp)。 消费者在启动期间从服务提供者获取配置数据(这基本上是从DB读取数据)并将其存储在Cache中。 在定期时间之后刷新缓存以反映在数据库中完成的任何更改。 问题 除了缓存刷新之外,我还想在有人更改数据库时通知消费者,配置已更改,请重新加载。 我可以使用哪些通知机制来实现此目的?

用于Java中的适配器模式

我一直在学习即将申请的初级开发角色的适配器和外观设计模式,因为我期待被问到我对我使用它的模式和时间的了解。 虽然模式本身似乎很直接 – 我正在努力想到实际用途,我可以在个人项目中使用它。 那么有人可以在一个小型的个人项目中提出一个使用它的想法吗? 该模式是否也出现在Java API中的任何位置?

将装饰器设计模式用于类的层次结构

查看以下(简化)类的层次结构: > Email (base class) > SimpleEmail extends Email > HtmlEmail extends Email 我需要修饰Email.send()来添加限制function。 我需要实例化SimpleEmail,HtmlEmail或其他类似的Email子类。 这个模式到底应该是什么样的? 我的猜测(需要纠正)如下: class abstract EmailDecorator -> Define a constructor: EmailDecorator(Email component) -> Implements all methods of Email and passes values through to component -> Adds functionality to send() method class SimpleEmailDecorator extends EmailDecorator -> Define a constructor: SimpleEmailDecorator(SimpleEmail component) -> […]

使用级联函数调用设计API(Class.doThis(“…”)。doThat(“…”)…)

我已经看到一些API的设计方式必须使用它们,如下面的代码 Class.doThis(“…”).doThat(“…”)….. 例如,HTTPCommon(Fluent API)可用作: Request.Get(“http://somehost/”) .connectTimeout(1000) .socketTimeout(1000) .execute().returnContent().asString(); 石英计划可用作: JobDetail job = newJob(HelloJob.class) .withIdentity(“job1”, “group1”) .build(); SimpleCatptch可用作: Captcha captcha = new Captcha.Builder(200, 50) .addText() .addBackground() .addNoise() .gimp() .addBorder() 这种API设计的名称是什么? 这样的设计好吗?

我该如何清理exception处理?

我正在寻找清理目前我正在处理的代码库的exception混乱。 基本设置是这样的。 我有一个接口,由很多类实现,如下所示: public interface TerminalMessage { // Override for specific return data type. public E send(TerminalStream stream) throws Exception; } 这些类抛出了许多不同的exception,如IOException,InterruptedException等。 就像现在一样,我所做的只是在捕获的exception上调用getMessage()并将此消息转发给ui-code。 这不是很好,因为我有时会向用户显示伪造的消息,并且我会捕获不必要的exception。 我正在考虑创建一个自定义exception类(TerminalException)来包装所有这些exception。 但是我不知道在哪里进行包装,是否应该在首次抛出exception(例如在输出流中)或每个send()方法中完成包装。 前者的优点是不添加太多代码,但是对我来说更有意义的是流抛出IOException而不是TerminalException。 上面的设计也没有真正解决显示给用户的有时不好的消息,所以一些提示如何将抛出的exception转换为对用户有用的东西会很棒! 谢谢!

在c ++中有效的java builder成语等价?

这是自从阅读Effective Java以来​​我一直在使用的一个很好的习惯用法。 我一直试图找到一个C ++等价物或类似的东西,并没有运气。 GoF书中的传统建筑模式在我的案例中并不适用。 这是一个复杂的对象,有一个非常混乱的构造函数。 下面是Java的一个小实现。 class ComplicatedObject { private String field1; private String field2; private int field3; private ComplicatedObject(Builder builder) { this.field1 = builder.myField1; this.field2 = builder.myField2; this.field3 = builder.myField3; } public static class Builder { private String myField1 = “some default”; private String myField2 = “some other default”; private int myField3 = […]

更多摆动设计和动作

我对gui编程很新,所以我一直在阅读这个网站上有关摇摆和设计的每个post。 一遍又一遍地回答的是,人们应该为这些行动设置多级课程。 像这样:( GUI是一些JFrame ) 替代文字http://img341.imageshack.us/img341/255/skjermdump.png 现在,这对单向操作很有用,比如OpenDialog。 但是DialogA和B按钮的操作必须能够访问其对话框和controller所有组件(将会有很多组件)。 这就是我陷入困境的地方。 我能看到的唯一理智的方法是把它放在DialogA/B 但我需要将controller一直向下传递,通过甚至不需要它的类,它会得到所有的意大利面条。 真的不想要那个。 以前有人肯定遇到过这个问题。 那么我应该把这个Action放在哪里? 或者我应该放弃整个设计? 编辑:从别处得到了一个很好的答案。 解决。

final static vs non-final静态变量?

有没有人知道这两种方法的不同之处? public class SingleTone { private static final instance = new SingleTone(); private SingleTone() { } public [static] SingleTone getinstance() { return instance; } } 和 public class SingleTone { private static instance = new SingleTone(); private SingleTone() { } public [static] SingleTone getinstance() { return instance; } } 我知道最终的静态变量是线程安全的但是我找不到非最终的变量。 (注意:我正在寻找最终静态变量与非最终静态变量的差异,所以请不要建议如何实现Singleton设计模式。我知道有一种Enum方法。) 编辑:我错过了方法上的静态关键字现在已修复!

了解抽象工厂模式

我在维基上读过关于抽象工厂模式的文章。 但是我不明白使用这种模式真的有利可图。 你能得到一个很难避免抽象工厂模式的例子吗? 请考虑以下Java代码: public abstract class FinancialToolsFactory { public abstract TaxProcessor createTaxProcessor(); public abstract ShipFeeProcessor createShipFeeProcessor(); } public abstract class ShipFeeProcessor { abstract void calculateShipFee(Order order); } public abstract class TaxProcessor { abstract void calculateTaxes(Order order); } // Factories public class CanadaFinancialToolsFactory extends FinancialToolsFactory { public TaxProcessor createTaxProcessor() { return new CanadaTaxProcessor(); } public […]

Android – 谷歌对单身人士模式的矛盾

我一直在阅读关于Android中Singleton模式使用的一些内容以及它在保持Context方面的缺点。 实际上,当我实现以下代码时: private static HttpManager sSingleton; private Context mContext; private HttpManager(Context context) { mContext = context; } public static synchronized HttpManager getInstance(Context context) { if (sSingleton == null) { sSingleton = new HttpManager(context); } return sSingleton; } Android Studio向我显示以下警告: 不要将Android上下文类放在静态字段中(静态引用HttpManager,其中字段mContext指向Context); 这是内存泄漏,也会破坏Instant Run。 但是,我可以在Android的文档页面中看到Singletons的实现和推荐。 如果您的应用程序不断使用网络,那么设置RequestQueue的单个实例可能是最有效的,该实例将持续您的应用程序的生命周期。 您可以通过各种方式实现这一目标。 推荐的方法是实现封装RequestQueue和其他Volleyfunction的单例类。 由于谷歌自相矛盾,有人可以指导我并就此提出建议吗?