Tag: 设计模式

如何标记方法必须?

假设您使用构建器模式创建类名Person,并假设Builder类包含方法body() , head() , arms() ,当然还有build()并且您认为方法head()和build()必须使用这个class级的用户。 我们想以某种方式标记这些方法是强制性的,如果可能的话使用注释。 如果这个类的用户试图构建一个Person实例但是忘了调用这些方法中的任何一个,我们希望得到某种警告 – 来自java编译器,或者来自我们用来构建我们的Eclipse或Maven项目 – 他们中的任何一个都可以。 有可能吗? 你会建议哪种方式?

项目中使用的设计模式

嗨,我现在正在学习设计模式。 我想阅读各种项目中使用的设计模式以及它是如何实现的。 实现有助于在更广泛的图景中连接设计模式以及他们为何使用该模式。 开源项目的问题是没有正确记录。 有人可以用sm在线资源帮我吗? PS:如果可能,我需要c或C ++ 更新:下面列出的项目: http://www.boost.org http://sourceforge.net/projects/loki-lib/ ‘POCO’。 ACE(自适应通信环境)。 如果有人想添加更多请做。 Personaly我看了上面的项目,发现提升是一个很好的选择。 更新:由于java上的一篇很好的post描述了Java核心库中GoF设计模式的设计模式示例 。我在标签中也包含了一些其他语言,我知道

Java抽象类或静态实用类设计选择

我正在实施一些具有一些共同行为的战略(战略模式) ,并且尚未确定共同运营应该存在的地方。 假设我有1个上下文和3个策略,策略中使用的一些操作是共享的,有些仅需要2个其他操作,只需要1个策略。 没有成员级别的状态共享,因此唯一的操作实际上是无状态的。 操作的目的是支持将状态格式化为文件,例如视图助手。 选项1:创建一个AbstractStrategy类 我正在使用Java,因此将来会立即使用此function。 inheritance倾向于导致。 在一个山脊结构。 操作将是最终的。 选项2:创建一个Util类的静态助手 灵活,但由于某种原因感觉像代码味道。 没有山脊。 任何建议或偏好? 请注意,我正在处理的级别是策略级别,而不是上下文级别(请参阅维基百科链接)。

设计模式以减少Swing应用程序中的耦合

嘿所有,我正在研究Java Swing应用程序,我正在寻找一些指导。 应用程序相当小,但我注意到随着代码库越来越大,我在对象图中有很多耦合。 我对Swing来说相对比较新,但我已经编程了足够长的时间来了解它的发展方向。 我遇到的最大问题是设置我的事件处理。 我的子窗口和对象应该如何将事件传递给我的更高级别的对象而不引用它们? 我已经完成了相当数量的MVC网络编码。 这种模式是否适合Swing? 我应该建立自己的控制器吗? 我想我只是在捕捉人们发现使用Swing有用的模式。 在此先感谢您的帮助。

Setter AND(不是OR或VS)构建器模式

我有一种情况,我使用构建器模式来构造一个对象。 最好的例子是披萨代码 public class Pizza { private int size; private boolean cheese; private boolean pepperoni; private boolean bacon; public static class Builder { //required private final int size; //optional private boolean cheese = false; private boolean pepperoni = false; private boolean bacon = false; public Builder(int size) { this.size = size; } public Builder cheese(boolean […]

如何确保构建器模式完成?

编辑:我不担心被错误的顺序调用,因为这是通过使用多个接口强制执行,我只是担心终端方法被调用。 我正在使用构建器模式在我们的系统中创建权限。 我选择了一个构建器模式,因为安全性在我们的产品中非常重要(它涉及COPPA等人的未成年人),我认为权限必须可读,并且认为可读性至关重要(即使用流畅的风格构建器模式而不是具有6个值的单个函数)。 代码如下所示: permissionManager.grantUser( userId ).permissionTo( Right.READ ).item( docId ).asOf( new Date() ); 这些方法填充私有辅助bean,在终端方法(即asOf)提交数据库权限时; 如果那个方法没有被调用就没有任何反应。 有时,开发人员会忘记调用终端方法,这种方法不会导致编译器错误,并且很容易错过快速读取/浏览代码。 我该怎么做才能防止这个问题? 我不想返回需要保存的Permission对象,因为这会引入更多噪音并使权限代码更难以阅读,跟踪,跟踪和理解。 我曾想过在后台上放置一个标志,该标志由终端命令标记。 然后,检查finalize方法中的标志,如果创建对象而没有持久化,则写入日志。 (我知道finalize无法保证运行,但这是我能想到的最好的。)

抽象类扩展了具体类

我之前了解到抽象类可以扩展具体类。 虽然我没有从JAVA设计师那里看到它的原因,但它没问题。 我还了解到,扩展具体类的抽象类可以使重写方法成为抽象。 为什么? 你能提供有用的用例吗? 我正在努力学习设计模式,我不想错过任何东西。 这是一个例子: public class Foo { public void test() { } } public abstract class Bar extends Foo { @Override public abstract void test(); }

Singleton模式结合了延迟加载和线程安全性

我正在做一些关于单身人士的研究,特别是关于单身人士的懒惰与急切初始化。 急切初始化的一个例子: public class Singleton { //initialzed during class loading private static final Singleton INSTANCE = new Singleton(); //to prevent creating another instance of Singleton private Singleton(){} public static Singleton getSingleton(){ return INSTANCE; } } 但如上所示,它是急切的初始化和线程安全留给jvm但现在,我希望有相同的模式,但延迟初始化。 所以我想出了这个方法: public final class Foo { private static class FooLoader { private static final Foo INSTANCE = new Foo(); […]

Java EE DAO / DTO(数据传输对象)设计模式

目前我正在为我的工作项目使用struts2 Framework,在设计我的DAO类时,我在脑海中有一个问题需要改进设计模式。 在我的搜索function上,我有3种搜索 用一个参数搜索,另一个参数, 搜索多个参数, 搜索没有参数。 我的问题是,DAO方法的最佳方法是什么? 在我的struts2方法中,我有 public String execute() { //assuming these are passed in from JSP if (“searchByAnId”.equals(paramSearch)) { List datalist = this.someDao.implementList(theIdParam); } else if(“searchByAnOtherParam”.equals(paramSearch)) { List datalist = this.someDao.implementAnotherList(param1, param2, param3, param4) // more params } else { List datalist = this.someDao.implementListAll(); } return “success”; } 我正在阅读设计模式,如工厂方法,装饰器方法,观察者方法,但我不确定哪一个是最适合的(或其他没有第三方插件的东西)适合这个?

“主人偏好”课是一个好主意吗?

我有一个类来管理大型软件项目的用户首选项。 项目中可能需要从持久性存储设置或检索用户首选项的任何类都是调用此类上的静态方法。 这种集中管理允许以编程方式完全擦除首选项 – 如果每个pref都是在接近其使用代码的情况下处理的话,这将是不可能的。 在此过程中,我遇到了集中化设计的另一个含义。 该软件具有公共API。 该API可以在jar中自行提供。 该API中的类可能引用pref管理类。 因此,pref管理器必须进入API jar。 每个首选项可能都有一个默认值。 软件启动时,可能会计算该默认值。 算法取决于偏好,因此倾向于驻留在使用代码附近。 因此,如果pref管理器需要提供默认值,它会调用相关的类。 但是现在pref经理已成为一个“章鱼类”,将各种类型的类吸入到不应该存在的API jar中。 如果没有,那么使用API​​ jar的程序很快会遇到ClassDefexception。 如果确实如此,则API jar现在变得臃肿,因为其他每个类都可能引用其他类。 通常,其他Java程序员是否使用集中式类来管理他们的首选项? 将静态pref管理类作为公共API的一部分分发是否有意义? 该pref经理应该是确定默认值的代码的守护者吗?