Java 单例模式和Builder模式那种抽取代码成处理类更好
时间: 2023-12-02 19:03:16 浏览: 30
这取决于你的具体需求和场景。
单例模式适用于只需要创建一个实例的情况。它可以确保整个应用程序中只有一个实例存在,从而节省了系统资源,避免了多个实例之间的冲突和竞争。如果你的应用程序只需要一个费用处理类的实例,那么单例模式可能更适合你。
Builder模式适用于需要创建多个实例的情况,并且需要在创建实例时进行复杂的初始化和配置。它可以使复杂的对象创建过程更加灵活和可读。如果你需要创建多个不同配置的费用处理类实例,那么Builder模式可能更适合你。
总之,单例模式和Builder模式都是非常有用的设计模式,可以用于不同的场景。选择哪个取决于你的具体需求和设计。
相关问题
Java代码写 用Builder builder抽取一个费用处理类
好的,以下是一个简单的Java代码示例,演示如何使用Builder模式抽取一个费用处理类:
```
public class FeeProcessor {
private final int baseFee;
private final int extraFee;
private final int discount;
private FeeProcessor(Builder builder) {
this.baseFee = builder.baseFee;
this.extraFee = builder.extraFee;
this.discount = builder.discount;
}
public int calculateFee(int hours) {
int totalFee = baseFee + extraFee * hours;
if (discount > 0) {
totalFee -= totalFee * discount / 100;
}
return totalFee;
}
public static class Builder {
private int baseFee;
private int extraFee;
private int discount;
public Builder setBaseFee(int baseFee) {
this.baseFee = baseFee;
return this;
}
public Builder setExtraFee(int extraFee) {
this.extraFee = extraFee;
return this;
}
public Builder setDiscount(int discount) {
this.discount = discount;
return this;
}
public FeeProcessor build() {
return new FeeProcessor(this);
}
}
}
```
在这个示例中,我们创建了一个`FeeProcessor`类,它具有一个`calculateFee`方法,用于计算给定小时数的费用。我们使用一个名为`Builder`的内部静态类,来创建`FeeProcessor`对象。通过在`Builder`类中设置适当的参数,并调用`build`方法来构建`FeeProcessor`实例。
使用Builder模式可以让我们更容易地创建`FeeProcessor`对象,并且可以在以后添加更多的参数选项。此外,Builder模式还可以提供更好的可读性,因为它们可以清晰地表示要设置的参数,而不是依赖于方法参数的位置或名称。
帮我用java单例模式来读取xml代码
好的,以下是一个使用Java单例模式读取XML文件的示例代码:
```java
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLReader {
private static XMLReader instance;
private XMLReader() {}
public static XMLReader getInstance() {
if (instance == null) {
instance = new XMLReader();
}
return instance;
}
public void read(String filename) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(filename);
Element root = doc.getDocumentElement();
NodeList nodeList = root.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
String name = element.getAttribute("name");
String value = element.getTextContent();
System.out.println(name + " = " + value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在上面的示例代码中,我们使用了单例模式来创建XMLReader的唯一实例,避免了多次创建对象的开销。同时,我们将读取XML文件的代码封装在read()方法中,方便调用。调用方式如下:
```java
XMLReader reader = XMLReader.getInstance();
reader.read("config.xml");
```
其中,config.xml是需要读取的XML文件名。调用read()方法后,程序会输出XML文件中所有元素的名称和值。