设计模式:策略模式和工厂模式混合使用

这篇具有很好参考价值的文章主要介绍了设计模式:策略模式和工厂模式混合使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有时单个设计模式并不能满足我们的业务需求,这个时候就要根据具体的业务来混合使用设计模式,其中策略模式和工厂模式是比较常用的一个组合。工厂模式可以管理具体策略的生命周期,策略模式可以丰满具体细节的逻辑。

代码示例

interface Strategy {
    void execute();
}
 // 具体策略类1
class StrategyImpl1 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略1");
    }
}
 // 具体策略类2
class StrategyImpl2 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略2");
    }
}
 // 工厂接口
interface Factory {
    Strategy createStrategy();
}
 // 具体工厂类1
class FactoryImpl1 implements Factory {
    @Override
    public Strategy createStrategy() {
        return new StrategyImpl1();
    }
}
 // 具体工厂类2
class FactoryImpl2 implements Factory {
    @Override
    public Strategy createStrategy() {
        return new StrategyImpl2();
    }
}
 // 测试类
public class Main {
    public static void main(String[] args) {
        Factory factory1 = new FactoryImpl1();
        Strategy strategy1 = factory1.createStrategy();
        strategy1.execute();
         Factory factory2 = new FactoryImpl2();
        Strategy strategy2 = factory2.createStrategy();
        strategy2.execute();
    }
}

在这个示例中,我们定义了一个策略接口和两个具体策略类。然后,我们创建了一个工厂接口和两个具体工厂类,每个工厂类负责创建不同的策略实例。最后,在测试类中,我们使用工厂类创建了不同的策略实例,并调用它们的执行方法。

以上只是个简单的示例,我们可以把工厂模式用map改进一下,并不需要这么多的子工厂类。

interface Strategy {
    void execute();
}

// 具体策略类1
class StrategyImpl1 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略1");
    }

	@PostConstruct
	public void registryFactory(){
		Factory.CHOOSER_MAP.registry("1",this);
	}
}

// 具体策略类2
class StrategyImpl2 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略2");
    }

	@PostConstruct
	public void registryFactory(){
		Factory.CHOOSER_MAP.registry("2",this);
	}
}

// 工厂接口
public class Factory {

    private final static Map<String, Strategy > CHOOSER_MAP = new ConcurrentHashMap<>();

    public static void registry(String code, Strategy strategy ) {
        CHOOSER_MAP.put(code, strategy );
    }

    public static Strategy chose(String code) {
		CHOOSER_MAP.get(code);
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        StrategyImpl1  StrategyImpl1  = PlatformChooserFactory.chose(1);

		StrategyImp2  StrategyImpl2  = PlatformChooserFactory.chose(2);
    }
}

以上就是改造后的代码,这样就比较简单直观了。工厂类中我们使用map去存储具体的策略类,并且提供注册和获取方法。具体策略类在初始化的时候,会把当前类注册到工厂类的map中。这样我们使用的时候,只要根据具体的key就可以拿到具体的策略类。

优缺点

优点:

  1. 灵活性:策略模式允许在运行时选择不同的策略,而工厂模式可以根据需求创建相应的对象。这种组合可以使系统更加灵活,能够根据不同的需求选择合适的策略和对象。
  2. 可扩展性:通过工厂模式,可以轻松添加新的具体产品或策略,而无需修改现有代码。这使得系统更容易扩展,可以根据需要动态添加新的产品和策略。
  3. 代码复用:策略模式和工厂模式都鼓励代码的重用。策略模式中的策略和工厂模式中的产品可以在不同的上下文中被重复使用,避免了重复编写相似的代码。
  4. 松耦合:策略模式和工厂模式的结合可以实现松耦合的设计。策略模式通过接口与具体策略解耦,工厂模式通过抽象工厂与具体产品解耦。这种松耦合设计使得系统更加灵活、可维护和可测试。

缺点:

  1. 增加复杂性:使用策略模式和工厂模式的混合会增加代码的复杂性,需要定义多个接口、类和实现。这可能会增加开发和维护的成本。
  2. 增加类的数量:使用策略模式和工厂模式的混合可能导致类的数量增加,特别是在有多个具体策略和产品时。这可能会增加系统的复杂性和内存占用。

总结

需要根据具体的应用场景和需求来权衡使用策略模式和工厂模式的混合。在某些情况下,这种组合可以提供更灵活、可扩展和可维护的设计,但也需要考虑代码复杂性和类的数量增加的影响。文章来源地址https://www.toymoban.com/news/detail-732002.html

到了这里,关于设计模式:策略模式和工厂模式混合使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ 程序设计:四大模式(工厂+装饰+策略+观察者)

    \\\"工厂+装饰+策略+观察者\\\"是常见且常用的设计模式之一,但并不是指称\\\"四大模式\\\"的官方术语。 \\\" 四大模式 \\\"通常是指指令式面向对象编程中的四个基本概念: 封装 、 继承 、 多态 和 抽象 。这四个概念是面向对象编程的基石。 工厂模式( 例:工厂方法模式 )中,通常存在

    2024年02月17日
    浏览(47)
  • 学习笔记-设计模式-创建型模式-工厂模式

    工厂模式是一种创建者设计模式,细分之下可以分成三类 简单工厂模式 , 工厂方法模式 和 抽象工厂模式 。 简单工厂模式 最简单的工厂模式,它采用静态方法的方式来决定应该应该生产什么商品。 它的优点在于 将创建实例的工作与使用实例的工作分开,使用者不必关心类

    2024年02月10日
    浏览(38)
  • 【设计模式】什么场景可以考虑使用简单工厂模式

    工厂模式是一种创建型模式,主要作用就是创建对象,将对象的创建过程和使用的过程进行解耦。我们平时说的工厂模式实际上是对三种不同类型的工厂模式的统称, 简单工厂、工厂方法、抽象工厂 ,而在23种设计模式中,只定义了工厂方法和抽象工厂,将简单工厂看作是工

    2024年01月18日
    浏览(64)
  • 【设计模式】使用 go 语言实现简单工厂模式

    最近在看《大话设计模式》,这本书通过对话形式讲解设计模式的使用场景,有兴趣的可以去看一下。 第一篇讲的是 简单工厂模式 ,要求输入两个数和运算符号,得到运行结果。 这个需求不难,难就难在类要怎么设计,才能达到可复用、维护性强、可拓展和灵活性高。 运

    2024年02月05日
    浏览(48)
  • 【设计模式】SpringBoot优雅使用策略模式

    本篇文章主要会描述SpringBoot与策略模式的结合使用,因为不涉及到理论部分,所以在阅读本篇之前,需要对策略模式的理论已经有了一个基本的了解。 策略模式有3种角色,分别为: 选择器 、 抽象策略 、 策略实例 。 其中 选择器 selector 又被称为上下文 context ,其作用为通

    2024年02月10日
    浏览(41)
  • 【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    有各种鸭子,比如野鸭、北京鸭、水鸭等。 鸭子有各种行为,比如走路、叫、飞行等。不同鸭子的行为可能略有不同。要求显示鸭子的信息 不同的鸭子继承一个父类Duck,如果是相同的行为就继承,不同行为就重写方法 实现 【鸭子抽象类】 【野鸭】 【北京鸭】 【玩具鸭】

    2024年02月12日
    浏览(60)
  • 自学设计模式(简单工厂模式、工厂模式、抽象工厂模式)

    使用工厂模式来生产某类对象(代码简化且容易维护,类之间有血缘关系,可以通过工厂类进行生产); 简单工厂模式(用于创建简单对象) 对于简单工厂模式,需要的工厂类只有一个; 在工厂类中的公共成员函数来创建所需对象; 工厂模式 简单工厂模式会违反开放封闭

    2024年02月11日
    浏览(43)
  • 反射和工厂设计模式---工厂设计模式

    工厂模式(Factory Pattern)是开发中比较常用的设计模式之一。 它属于创建型模式(单例模式就是创建型模式的一种),这种模式让我们 在创建对象时不会直接暴露创建逻辑,而是通过使用一个共同的接口来完成对象的创建 。 工厂模式可以分为三种,分别是简单工厂模式、工厂方

    2024年02月13日
    浏览(46)
  • 设计模式(二)、工厂模式--简单工厂模式

    简单工厂模式:又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。 需要注意的是:简单工厂模式属于创建型模式,但不属于23种GOF设计模式之一  该模式主要有以下几个模块构成: 具体说明结合代码,如下: 代码中主要是有一个cake接父类,两个

    2024年02月13日
    浏览(50)
  • 设计模式(二)、工厂模式--工厂方法模式

    工厂方法模式是一种常用的创建型设计模式。它解决了简单工厂模式的问题:如违反了开闭原则,其次可以用于更复杂的结构 它的核心结构有四个角色  抽象工厂;具体工厂;抽象产品;具体产品 抽象工厂(抽象类或接口)不在负责具体的创建过程,即具体的代码实现。只制定

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包