工厂模式和策略模式区别

工厂模式(Factory Pattern)和策略模式(Strategy Pattern)是两种常用的设计模式,它们在软件开发中有不同的应用场景和实现方式。

工厂模式(Factory Pattern):

工厂模式是一种创建型设计模式,用于创建对象而无需指定具体类的实例化过程。它包括工厂方法模式和抽象工厂模式,其中工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪个类;抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口。

策略模式(Strategy Pattern):

策略模式是一种行为设计模式,定义一系列算法,将每个算法封装起来,并使它们可以互相替换。通过策略模式,可以在运行时选择算法的变体或行为。

区别:

  1. 目的

    • 工厂模式的主要目的是封装对象的创建过程,使客户端代码与具体类的实例化解耦。
    • 策略模式的主要目的是定义一系列算法,使它们可以相互替换。
  2. 应用场景

    • 工厂模式通常在需要根据条件创建不同类型的对象时使用。
    • 策略模式通常在需要在运行时动态地选择算法时使用

Java 代码示例:

工厂模式示例:
// 产品接口
interface Product {
    void print();
}

// 具体产品类 A
class ConcreteProductA implements Product {
    @Override
    public void print() {
        System.out.println("Product A");
    }
}

// 具体产品类 B
class ConcreteProductB implements Product {
    @Override
    public void print() {
        System.out.println("Product B");
    }
}

// 工厂类
class Factory {
    public Product createProduct(String type) {
        if (type.equals("A")) {
            return new ConcreteProductA();
        } else if (type.equals("B")) {
            return new ConcreteProductB();
        }
        return null;
    }
}

public class FactoryPatternExample {
    public static void main(String[] args) {
        Factory factory = new Factory();
        Product productA = factory.createProduct("A");
        Product productB = factory.createProduct("B");

        productA.print();
        productB.print();
    }
}
策略模式示例:
// 策略接口
interface Strategy {
    void execute();
}

// 具体策略类 A
class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing strategy A");
    }
}

// 具体策略类 B
class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing strategy B");
    }
}

// 策略上下文
class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        strategy.execute();
    }
}

public class StrategyPatternExample {
    public static void main(String[] args) {
        Strategy strategyA = new ConcreteStrategyA();
        Strategy strategyB = new ConcreteStrategyB();

        Context context = new Context(strategyA);
        context.executeStrategy();

        context = new Context(strategyB);
        context.executeStrategy();
    }
}

在工厂模式示例中,工厂类负责创建产品对象,根据传入的参数选择创建哪种产品。而在策略模式示例中,Context类负责执行具体的策略,根据传入的策略对象执行不同的算法。

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值