Java--设计模式-18-策略模式

简介: 策略模式(Strategy Pattern)就是一个类的行为或其算法封装起来,在运行时可以更改,相互替换,最终达到何种目的,取决于调用者传入的要求条件。属于行为型模式。

策略模式(Strategy Pattern)就是一个类的行为或其算法封装起来,在运行时可以更改,相互替换,最终达到何种目的,取决于调用者传入的要求条件。属于行为型模式。

       说起这个,也正是因为去年开会的时候被架构的策略模式给忽悠住了,我才决定把设计模式优先提到学习计划前列,干脆就把所有的模式全了解一遍。

       在系统流程中,策略其实就是我们大量if else 的替代品,比如昨天文章Java-102-设计模式-17-命令模式 中的命令管理器,我们就使用了swtich语法来控制命令走不同的实现逻辑。

       就跟足浴中心按摩一样,大堂经理就是策略类。你告诉她喜欢啥样的技师,她就给你推来对应的类型,最终目的都是养生。

       现在假设阿宾想要找个女的结婚,但是在犹豫娶什么条件的女的。不管啥女的,最终目的都是结婚。

image.png

代码实现:

一、阿宾根据不同的条件找到对应条件的女人结婚

1、将女人抽象到interface,并实现三个女人,有一个共同方法:结婚

packagecom.xing.design.strategy;
publicinterfaceWoman {
voidmarry();
}
packagecom.xing.design.strategy;
publicclassCangjingkongimplementsWoman{
@Overridepublicvoidmarry(Stringname) {
System.out.println("我是苍老师,"+name+"因为我活儿好和我结婚啦");
  }
}
packagecom.xing.design.strategy;
publicclassGaoyuanyuanimplementsWoman{
@Overridepublicvoidmarry(Stringname) {
System.out.println("我是高老师,"+name+"因为我有气质和我结婚啦");
  }
}
packagecom.xing.design.strategy;
publicclassLiuyanimplementsWoman{
@Overridepublicvoidmarry(Stringname) {
System.out.println("我是柳老师,小名有容,"+name+"因为我胸大和我结婚啦");
  }
}

2.搞一个策略类,根据调用者传入的条件控制去哪个算法

packagecom.xing.design.strategy;
publicclassStrategyManager {
publicstaticvoidmarry(Stringname, Stringcontidion) {
if("活儿好".equals(contidion)) {
newCangjingkong().marry(name);
    }elseif("有气质".equals(contidion)) {
newLiuyan().marry(name);
    }elseif("胸大".equals(contidion)) {
newGaoyuanyuan().marry(name);
    }else {
System.out.println("看看自己屌样哇,还要求呢");
    }
  }
}

3.编写main方法测试

packagecom.xing.design.strategy;
publicclassStrategyDemo {
publicstaticvoidmain(String[] args) {
Stringname="阿宾";
System.out.println(name+"喜欢活儿好的,我要找活好的结婚");
StrategyManager.marry(name, "活儿好");
Stringname2="秀儿";
System.out.println(name2+"喜欢有气质的,我要找有气质的结婚");
StrategyManager.marry(name2, "有气质");
Stringname3="江涛";
System.out.println(name3+"喜欢🐻大的,我要找🐻大的的结婚");
StrategyManager.marry(name3, "胸大");
Stringname4="小热";
System.out.println(name4+"喜欢完美的,我要找完美的结婚");
StrategyManager.marry(name4, "完美的");
  }
}


4.测试结果

image.png

       几位屌丝(调用者)调用同一个策略类,但是根据各自的喜好,都达成了结婚的目的。三种策略(三位老师)都可以实现一个特定的目的(结婚),使用哪种策略取决于调用者(屌丝们)传入哪种要求(喜好条件)。



总结:

       策略模式,很常用


END

目录
相关文章
|
18天前
|
设计模式 算法 PHP
php设计模式--策略模式(六)
php设计模式--策略模式(六)
11 0
|
20天前
|
设计模式 Java 开发者
设计模式揭秘:Java世界的七大奇迹
【4月更文挑战第7天】探索Java设计模式:单例、工厂方法、抽象工厂、建造者、原型、适配器和观察者,助你构建健壮、灵活的软件系统。了解这些模式如何提升代码复用、可维护性,以及在特定场景下的应用,如资源管理、接口兼容和事件监听。掌握设计模式,但也需根据实际情况权衡,打造高效、优雅的软件解决方案。
|
20天前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
16小时前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
8 2
|
16小时前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
6 1
|
1天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
3天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
3天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
3天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
3天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式