Tag: 设计模式

Java:getInstance vs Static

Java中getInstance()的目的是什么? 在我的研究过程中,我继续阅读getInstance()有助于实现Singleton设计模式(这意味着整个程序中只有一个实例可供我理解)。 但我不能只使用静态? 这不是静止的全部意义吗? 如果我只是有静态方法和字段,它与使用getInstance()什么不同? 是否存在静态的“范围”? 例如,每个方法或类一个实例? 如果它们不同,在什么情况下我会选择getInstance()不是使用静态? 如果问题不清楚,我很抱歉,我确信我遗漏了一些有关主题的内容,我无法弄明白是什么。 感谢您提供任何建议。

关于工厂设计模式通过反思

我在工厂模式上进行研发我已经开发了下面的代码,现在我知道子类是Dog和Cat,但是请告诉我如果我希望通过在main中传递类名reflection来实现同样的事情。 java的 public abstract class Animal { public abstract String makeSound(); } public class Dog extends Animal { @Override public String makeSound() { return “Woof”; } } public class Cat extends Animal { @Override public String makeSound() { return “Meow”; } } public class AnimalFactory { public Animal getAnimal(String type) { if (“canine”.equals(type)) { return […]

哪种Java设计模式最适合包含循环的if-else语句?

如果没有,我有7-8的用例。 示例用例: String type; List entityList; if (type.equals(“A”)) { ClassA a = new ClassA(); a.performTask(); for (Entity e: entitylist) { // do some task } } else if (type.equals(“B”)) { ClassB b = new ClassB(); b.performTask(); for (Entity e: entitylist) { // do some different task } } 哪种java设计模式最适合这种情况,因为我想消除这个if else梯形图?

防止来自其他类的类实例化

我正在使用域,视图和控制器。 每个都包含自己的类。 该域包含许多不应在域外的类中实例化的类。 我的印象是默认访问修饰符会帮助我。 使我的域类的构造函数包可见。 在导入正确的package.class文件之后,任何类仍然可以使用构造函数。 我怎样才能防止这种情况发生?

DAO设计模式和Servlet

我正在阅读Oracle网站上的DAO设计模式,我试图在使用JSP,Servlet,普通java对象和MVC模式的上下文中理解下面的图像。 在我的例子中,BusinessObject是我的servlet,TransferObject是我的java类,只有属性,mutators和访问器(DTO)? 例如,如果我在servlet(控制器)中有这个代码 DTO.setFirstName(request.getParameter(“firstName”)); DTO.setLastName(request.getParameter(“lastName”)); DAO.save(DTO); http://sofzh.miximages.com/java/index.html

没有if,切换实现Factory的最佳方法

我正在寻找许多方法来实现Java中的Factory模式,但仍然找不到一个完美的方法,如果/ switch plus不使用reflection,则不会受到影响。 我找到的最好的一个是Tom Hawtin在这里的答案: https : //stackoverflow.com/a/3434505/1390874 但我最担心的是它将匿名类的HashMap存储在内存中。 问题是除了Tom Hawtin的回答之外,人们还会考虑使用Class.newInstance()吗? 这样可以避免我们在内存中存储不必要的匿名类吗? 加上代码会更干净。 它看起来像这样: class MyFactory { private static final Map factoryMap = Collections.unmodifiableMap(new HashMap() {{ put(“Meow”, Cat.class); put(“Woof”, Dog.class); }}); public Animal createAnimal(String action) { return (Animal) factoryMap.get(action).newInstance(); } }

为现有文件的文件名添加索引(file.txt => file_1.txt)

如果文件已经存在,我想为文件名添加一个索引,这样我就不会覆盖它。 就像我有一个文件myfile.txt并且同时myfile.txt存在于目标文件夹中 – 我需要复制我的文件名为myfile_1.txt 同时如果我有一个文件myfile.txt ,但destintation文件夹包含myfile.txt和myfile_1.txt – 生成的文件名必须是myfile_2.txt 因此,该function与在Microsoft操作系统中创建文件夹非常相似。 这样做的最佳方法是什么?

在IoC容器中将依赖项设置为NULL并在运行时提供依赖项是不好的做法?

我有一个包含Socket和其他字段的SocketManager类。 除了Socket之外的所有字段都可以在对象图的组合期间使用DI框架注入。 我的想法是通过将Socket留空并在运行时设置它来简单地构建整个对象图。 这将允许我在代码中的某一点完成SocketManager实例化,并在整个程序中使用该实例(因为它已经通过DI框架设置为依赖)? 这是“注入”运行时依赖项的标准方法还是不好的做法? 抽象工厂似乎是一个坏主意,原因有两个:a)每次创建一个不同的对象b)它需要在我想要创建对象的每个地方运行时参数 让我来说明一下我的问题: SocketManager类: public class SocketManager { //i’ll only receive the socket at runtime Socket socket; //this object is available at compile-time and can be injected through the DI container InjectableObject obj; } 在我的代码[CodePosition1]的某处我会收到这样的套接字: public class SocketCreator{ SocketManager socketManager; //will be injected through DI container at startup Socket socket = […]

在Java中,为什么没有关键字的代码块,只是大括号

我正在重新考虑一些inheritance的代码,但是被设计决定所困扰,并且无法找出适当的条款来谷歌这个。 我的前任会使用像这样的块: public class ChildClass extends ParentClass { { inheritedVar = “someVal”; } public ChildClass(){ /* constructor exists */ } // rest of code } 声明没有关键字的代码块有什么意义? 它不像静态块,我不相信。 它是在构造函数中设置的替代方法吗? 如果使用工厂(在这种情况下不是),这会产生一些影响吗? 我在C中发现了一个相关的线程,但是推理(范围和变量声明)似乎与Java无关。 关于“为什么”的任何想法或想法将不胜感激。 这很容易重新考虑这一点,我只是好奇这一点。

如何替换字符串中的括号

我有一个包含令牌的字符串列表。 令牌是: {ARG:TOKEN_NAME}。 我还有令牌的哈希映射,其中key是令牌,value是我想用令牌代替的值。 当我使用“replaceAll”方法时,我收到错误: java.util.regex.PatternSyntaxException:非法重复 我的代码是这样的: myStr.replaceAll(valueFromHashMap , “X”); 和valueFromHashMap包含{和}。 我把这个hashmap作为参数。