工厂模式和计谋模式区

打印 上一主题 下一主题

主题 971|帖子 971|积分 2913

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
工厂模式(Factory Pattern)和计谋模式(Strategy Pattern)是两种常见的设计模式,它们都用于办理不同场景下的代码组织题目。以下是它们的区别和应用场景的具体比较:
工厂模式(Factory Pattern):
工厂模式是一种创建型设计模式,重要用于对象的创建。它通过将对象的创建逻辑封装到一个工厂类中,使得客户端不必关心对象的具体创建过程,从而进步代码的可扩展性和维护性。
核心头脑:界说一个接口用于创建对象,并让子类决定实例化哪一个类。工厂模式将实例化操作推迟到子类中进行。
计谋模式(Strategy Pattern):
计谋模式是一种行为型设计模式,它将算法、行为、或逻辑的不同实现封装成独立的计谋类,并允许它们在运行时相互替换。计谋模式通过将行为的具体实现分离出来,使得算法可以在不改变客户端代码的情况下动态改变。
核心头脑:界说一系列算法或行为,并将它们封装到独立的计谋类中,客户端可以根据需要在运行时选择合适的计谋。
2.意图
工厂模式:办理对象的创建题目。通过将对象的创建封装在一个工厂中,避免客户端直接使用new关键字,使代码更具扩展性。
计谋模式:办理行为的选择题目。通过将不同的行为封装为计谋类,使得可以动态替换算法或行为。
3.应用场景
工厂模式的适用场景:
需要创建复杂对象时,且对象创建逻辑比较复杂。
客户端不需要知道具体的对象创建细节,只需要得到正确的对象实例。
代码中有多个具体类的创建逻辑,且未来大概会增加新的类。
计谋模式的适用场景:
有多种算法、操作或行为可以互换,且可以在运行时动态选择。
需要避免使用大量if-else或switch语句来选择算法或行为。
想要将算法或行为与具体的业务逻辑分离,便于扩展和维护。
4.结构对比
工厂模式结构:
工厂类:负责创建对象的逻辑。
产品接口:界说产品对象的公共接口。
具体产品类:工厂类生产的具体产品。
计谋模式结构:
上下文类:持有一个计谋类的引用,并在运行时选择不同的计谋实行相应的行为。
计谋接口:界说不同计谋类的公共接口。
具体计谋类:封装具体的算法或行为。
5.代码示例
工厂模式示例
  1. // 产品接口
  2. interface Product {
  3.     void create();
  4. }
  5. // 具体产品类
  6. class ConcreteProductA implements Product {
  7.     public void create() {
  8.         System.out.println("Product A created");
  9.     }
  10. }
  11. class ConcreteProductB implements Product {
  12.     public void create() {
  13.         System.out.println("Product B created");
  14.     }
  15. }
  16. // 工厂类
  17. class ProductFactory {
  18.     public static Product createProduct(String type) {
  19.         if (type.equals("A")) {
  20.             return new ConcreteProductA();
  21.         } else if (type.equals("B")) {
  22.             return new ConcreteProductB();
  23.         } else {
  24.             throw new IllegalArgumentException("Unknown product type");
  25.         }
  26.     }
  27. }
  28. // 客户端使用
  29. public class Client {
  30.     public static void main(String[] args) {
  31.         Product product = ProductFactory.createProduct("A");
  32.         product.create();  // 输出: Product A created
  33.     }
  34. }
复制代码
计谋模式示例
  1. // 策略接口
  2. interface Strategy {
  3.     void execute();
  4. }
  5. // 具体策略类
  6. class ConcreteStrategyA implements Strategy {
  7.     public void execute() {
  8.         System.out.println("Executing strategy A");
  9.     }
  10. }
  11. class ConcreteStrategyB implements Strategy {
  12.     public void execute() {
  13.         System.out.println("Executing strategy B");
  14.     }
  15. }
  16. // 上下文类
  17. class Context {
  18.     private Strategy strategy;
  19.     public void setStrategy(Strategy strategy) {
  20.         this.strategy = strategy;
  21.     }
  22.     public void executeStrategy() {
  23.         strategy.execute();
  24.     }
  25. }
  26. // 客户端使用
  27. public class Client {
  28.     public static void main(String[] args) {
  29.         Context context = new Context();
  30.         context.setStrategy(new ConcreteStrategyA());
  31.         context.executeStrategy();  // 输出: Executing strategy A
  32.         context.setStrategy(new ConcreteStrategyB());
  33.         context.executeStrategy();  // 输出: Executing strategy B
  34.     }
  35. }
复制代码
6.优缺点
工厂模式的优点:
解耦了对象的创建过程,便于扩展新的产品类。
进步了代码的灵活性和可维护性。
工厂模式的缺点:
大概增加代码的复杂性,尤其是涉及多个工厂类时。
难以处置惩罚非常复杂的对象创建逻辑。
计谋模式的优点:
避免了大量的if-else或switch语句,使得算法选择更加灵活。
可以动态改变计谋,扩展新的计谋类无需修改现有代码。
计谋模式的缺点:
大概导致计谋类数量过多,增加代码管理的复杂性。
上下文类必须知道计谋的接口,增加了客户端的复杂度。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表