前言

在软件设计中,设计模式是解决常见问题的最佳实践。工厂模式和策略模式是两种常用的创建型和行为型设计模式,它们都提供了管理对象创建和行为变化的策略,但它们的应用场景和实现方式有所不同。本文将详细介绍工厂模式和策略模式,并探讨它们之间的区别。

工厂模式

工厂模式是一种创建型设计模式,用于处理对象的创建过程,使得对象的创建与使用分离,从而提高程序的可扩展性和可维护性。

特点

对象创建的封装

工厂模式将对象的创建逻辑封装在工厂类中,客户端无需关心对象的具体创建细节。

代码的扩展性

当需要引入新的产品类时,只需添加相应的工厂类或修改现有工厂类,无需修改客户端代码。

解耦

工厂模式实现了客户端与具体产品的解耦。

实现

定义一个产品接口 只有一个使用方法

/**
 * 产品接口
 * @author leon
 * @date 2024-09-07 14:41:12
 */
public interface Product {
    void use();
}

产品A实现

/**
 *  ConcreteProductA 类
 * @author leon
 * @date 2024-09-07 14:42:13
 */
public class ConcreteProductA implements Product {
    @Override
    public void use() {
        System.out.println("Using ConcreteProductA");
    }
}

产品B实现

/**
 *  ConcreteProductB 类
 * @author leon
 * @date 2024-09-07 14:42:40
 */
public class ConcreteProductB implements Product {
    @Override
    public void use() {
        System.out.println("Using ConcreteProductB");
    }
}

定义工厂接口

/**
 *  Factory 接口
 * @author leon
 * @date 2024-09-07 14:43:30
 */
public interface Factory {
    Product createProduct();
}

工厂实现类

/**
 *  ConcreteFactory 类
 * @author leon
 * @date 2024-09-07 14:44:10
 */
public class ConcreteFactory implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA(); // 或者返回 new ConcreteProductB()
    }
}

客户端代码

public class Client {
    public static void main(String[] args) {
        Factory factory = new ConcreteFactory();
        Product product = factory.createProduct();
        product.use();
    }
}

策略模式

策略模式是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互换使用。

特点

算法的封装

策略模式将算法封装在独立的策略类中,使得算法的变化不会影响到使用算法的客户。

行为的替换

策略模式使得算法或行为可以在运行时更换,提高了程序的灵活性。

解耦

策略模式实现了算法的使用与实现的解耦。

实现

定义策略接口

/**
 *  Strategy 接口
 * @author leon
 * @date 2024-09-07 14:44:30
 */
public interface Strategy {
    void execute();
}

定义 ConcreteStrategyA


/**
 *  ConcreteStrategyA 类
 * @author leon
 * @date 2024-09-07 14:44:58
 */
public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing ConcreteStrategyA");
    }
}

定义 ConcreteStrategyB类

/**
 *  ConcreteStrategyB 类
 * @author leon
 * @date 2024-09-07 14:45:35
 */
public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing ConcreteStrategyB");
    }
}

定义 Context

/**
 * Context 类
 * @author leon
 * @date 2024-09-07 14:44:30
 */
public class Context {
    private Strategy strategy;

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

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

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

客户端代码

public class Client {
    public static void main(String[] args) {
        Context context = new Context(new ConcreteStrategyA());
        context.executeStrategy();

        // 动态更换策略
        context.setStrategy(new ConcreteStrategyB());
        context.executeStrategy();
    }
}

区别

目的不同:

工厂模式主要用于对象的创建,而策略模式主要用于定义一系列算法或行为,并使它们可以互换。

应用场景:

工厂模式适用于需要创建复杂对象的场景,策略模式适用于需要根据不同条件改变算法或行为的场景。

实现方式:

工厂模式通过工厂类来创建对象,策略模式通过上下文来使用不同的策略对象。

总结

工厂模式和策略模式虽然都是设计模式,但它们的目的、应用场景和实现方式各有不同。理解它们之间的区别有助于在合适的场景选择合适的模式,从而提高软件设计的灵活性和可维护性。


good day!!!

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部