前言
在软件设计中,设计模式是解决常见问题的最佳实践。工厂模式和策略模式是两种常用的创建型和行为型设计模式,它们都提供了管理对象创建和行为变化的策略,但它们的应用场景和实现方式有所不同。本文将详细介绍工厂模式和策略模式,并探讨它们之间的区别。
工厂模式
工厂模式是一种创建型设计模式,用于处理对象的创建过程,使得对象的创建与使用分离,从而提高程序的可扩展性和可维护性。
特点
对象创建的封装
工厂模式将对象的创建逻辑封装在工厂类中,客户端无需关心对象的具体创建细节。
代码的扩展性
当需要引入新的产品类时,只需添加相应的工厂类或修改现有工厂类,无需修改客户端代码。
解耦
工厂模式实现了客户端与具体产品的解耦。
实现
定义一个产品接口 只有一个使用方法
/**
* 产品接口
* @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!!!
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 设计模式之工厂模式和策略模式实现以及区别
发表评论 取消回复