工厂模式为什么设置成静态
时间: 2024-05-04 12:14:22 浏览: 14
工厂模式是一种常用的创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪个类。这种模式可以将对象的创建和使用分离开来,从而降低系统的耦合度。
在工厂模式中,通常会定义一个工厂类来负责创建对象。如果这个工厂类是静态的,那么就可以直接通过类名调用工厂方法,而不需要先创建工厂类的实例。这种方式更加简洁和方便,因此很多情况下都会将工厂类设置成静态的。
另外,由于静态方法和属性是属于类而不是对象的,因此它们的生命周期也比较长。如果工厂类是经常被使用的,那么将其设置成静态的可以避免重复创建和销毁对象,提高程序的运行效率。
相关问题
怎么用静态工厂类实现策略模式
静态工厂类实现策略模式可以通过以下步骤实现:
1. 定义一个策略接口,包含具体策略类需要实现的方法。
2. 定义具体策略类,实现策略接口。
3. 定义一个静态工厂类,通过静态方法来创建具体策略类的实例,并返回策略接口类型的对象。
4. 在客户端代码中,通过静态工厂类的方法获取策略实例,然后调用策略接口的方法来执行具体的策略。
示例代码如下:
```
// 策略接口
public interface Strategy {
void execute();
}
// 具体策略类1
public class ConcreteStrategy1 implements Strategy {
@Override
public void execute() {
System.out.println("执行具体策略1");
}
}
// 具体策略类2
public class ConcreteStrategy2 implements Strategy {
@Override
public void execute() {
System.out.println("执行具体策略2");
}
}
// 静态工厂类
public class StrategyFactory {
public static Strategy createStrategy(String type) {
if ("strategy1".equals(type)) {
return new ConcreteStrategy1();
} else if ("strategy2".equals(type)) {
return new ConcreteStrategy2();
}
return null;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Strategy strategy = StrategyFactory.createStrategy("strategy1");
strategy.execute();
}
}
```
在上述代码中,通过静态工厂类 StrategyFactory 来创建具体策略类的实例,并返回策略接口类型的对象。客户端代码可以通过 StrategyFactory 的 createStrategy 方法来获取具体策略实例,然后调用 execute 方法来执行具体策略。
什么是简单工厂模式?
简单工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而无需直接暴露对象的创建逻辑。在简单工厂模式中,有一个工厂类负责根据客户端的请求创建相应的对象。
简单工厂模式包含以下几个角色:
1. 工厂类(Factory):负责创建对象的类,根据客户端的请求返回相应的对象。
2. 抽象产品类(Product):定义了产品的共同接口,具体产品类都实现了这个接口。
3. 具体产品类(Concrete Product):实现了抽象产品类定义的接口,是工厂类创建的目对象。
简单工厂模式的工作流程如下:
1. 客户端通过调用工厂类的静态方法来创建对象。
2. 工厂类根据客户端的请求决定创建哪个具体产品类的对象。
3. 工厂类创建具体产品类的对象,并将其返回给客户端。
简单工厂模式的优点是将对象的创建和使用分离,客户端只需要知道工厂类即可,无需关心具体产品类的实现细节。同时,如果需要修改产品类或者增加新的产品类,只需要修改工厂类即可,符合开闭原则。
然而,简单工厂模式也有一些缺点,例如当需要创建的产品类较多时,工厂类的代码会变得复杂,违反了单一职责原则。另外,新增产品时需要修改工厂类的代码,违反了开闭原则。