Tag: 设计模式

观察者模式适合文件监控?

我很想知道观察者模式是否是实现代码来监视日志文件及其更改的正确方法? 我目前正在使用它,但似乎有一个我无法解释的exception现象。 基本上,我创建了一个名为FileMonitor的类,它有一个触发的计时器,它迭代一个独特文件列表,寻找一个改变的“最后修改日期”。 在找到它之后,迭代监听器列表以找到匹配的文件,并通知它的fileChanged事件。 然后它开始处理文件中添加的行。 所以让我的问题更简洁: 观察者模式是否适合我想要做的事情? (目前我每个文件有一个监听器) 考虑到要监控多个文件,是否存在“并发问题”的可能性? 谢谢

java中使用generics的工厂方法模式,如何?

我的代码如下所示: public interface BaseDAO{ // marker interface } public interface CustomerDAO extends BaseDAO{ public void createCustomer(); public void deleteCustomer(); public Customer getCustomer(int id); // etc } public abstract class DAOFactory { public BaseDAO getCustomerDAO(); public static DAOFactory getInstance(){ if(system.getProperty(“allowtest”).equals(“yes”)) { return new TestDAOFactory(); } else return new ProdDAOFactory(); } public class TestDAOFactory extends DAOFactory{ public […]

在java中扩充工厂模式

我正在尝试使用工厂模式来创建一个QuestionTypeFactory,其中实例化的类将类似MultipleChoice,TrueFalseQuestion等。 工厂代码看起来像这样 class QuestionFactory { public enum QuestionType { TrueFalse, MultipleChoice, Essay } public static Question createQuestion(QuestionType quesType) { switch (quesType) { case TrueFalse: return new TrueFalseQuestion(); case MultipleChoice: return new MultipleChoiceQuestion(); case Essay: return new EssayQuestion(); } throw new IllegalArgumentException(“Not recognized.”); } } 这个现在可行了。 如果我想添加另一个问题类型,我将需要修改工厂类,我不想这样做。 如何设置它以便每个问题类在Factory中注册自己,这样当我添加新的问题类型时,我不必更改工厂的代码? 我对java有点新,我不知道该怎么做。 编辑 附加信息 所有问题类都实现了IQuestion接口。 我正在寻找一种方法来实现像这样的方法 public static void […]

这个Singleton对序列化和reflection攻击都有抵抗力吗?

以下代码是否对序列化和reflection攻击都有抵抗力? public class Example{ private static Example instance=new Example(); private Example(){} public static Example getInstance(){ return instance; } }

Java EE中的Facade有什么意义?

我真的不明白外立面的意义。 public abstract class AbstractFacade { private Class entityClass; public AbstractFacade(Class entityClass) { this.entityClass = entityClass; } protected abstract EntityManager getEntityManager(); public void create(T entity) { getEntityManager().persist(entity); } public void edit(T entity) { getEntityManager().merge(entity); } public void remove(T entity) { getEntityManager().remove(getEntityManager().merge(entity)); } public T find(Object id) { return getEntityManager().find(entityClass, id); } public List findAll() { […]

IntelliJ可以自动创建装饰器类吗?

有时,我创建一个这样的装饰器类: class MyInterfaceDecorator implements MyInterface { private final MyInterface delegate; … constructor taking a MyInterface instance … @Override public Object someInterfaceMethod(Some argument) { return delegate.someInterfaceMethod(argument); } … etc, more methods here… } IntelliJ可以自动为我创建这个课程吗?

什么是在hibernate实体和数据传输对象之间进行转换的好模式?

我有类似的问题和关注如何在Web服务返回的Hibernate实体和数据传输对象之间进行转换,如本问题所述: 在ejb3中使用数据传输对象被认为是最佳实践 这里提到的一个因素是,如果域模型发生变化,一组DTO将在Web服务的情况下保护消费者。 即使它似乎会为我的项目添加大量代码,但这种推理似乎很合理。 有没有一个好的设计模式可以用来将Hibernate实体(实现接口)转换为实现相同接口的DTO? 因此,假设以下两个实现’Book’,我需要将BookEntity.class转换为BookDTO.class,以便我可以让JAXB序列化并返回。 再说一遍,这整个前景对我来说似乎都很可疑,但如果有很好的模式来帮助处理这种转换,我很想得到一些见解。 是否有一些有趣的方式通过reflection转换? 还是我没想过的“建设者”模式? 我应该忽略DTO模式并传递实体吗?

java API中的单例类

Java API中Singleton Pattern的最佳示例是什么? Runtime类是单例吗?

Java Builder模式和“深层”对象层次结构

在“深层”对象层次结构中使用Builder模式的最佳实践是什么? 为了详细说明,我探讨了将Joshua Bloch提出的Builder模式应用于我的XML绑定代码的想法(我使用的是SimpleXML,但这个问题适用于任何情况)。 我的对象层次结构深度为4级,具有不同程度的复杂性。 通过这种方式,我的意思是,在某些级别中,我只有几个属性用于我的对象,而在某些其他级别,我有多达10个属性。 所以请考虑这个假设的例子(为简洁起见,我省略了Simple XML注释) public class Outermost { private String title; private int channel; private List middleList; } class Middle{ private int id; private String name; private boolean senior; /* … … 10 such properties */ private Innermost inner; } class Innermost{ private String something; private int foo; /* … Few more […]

工厂模式动态方法

我试图了解工厂模式。如果有很多实现,那么我的工厂模式将有很多if else或switch情况。 而且每次我介绍一个新的实现时,我都应该更改我的工厂代码 如下面的例子中假如狗狗鸭子正在实施宠物界面,如果许多动物实施宠物界面我的工厂如果代码或转换案件还有很多其他的话。 有没有办法通过带来更多动态方法来解决这个问题? package com.javapapers.sample.designpattern.factorymethod; //Factory method pattern implementation that instantiates objects based on logic public class PetFactory { public Pet getPet(String petType) { Pet pet = null; // based on logic factory instantiates an object if (“bark”.equals(petType)) pet = new Dog(); else if (“quack”.equals(petType)) pet = new Duck(); return pet; } 如果动物长大 […]