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

目录
相关文章
|
13天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
32 1
|
16天前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
22 2
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
43 2
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
48 0
[Java]23种设计模式
|
26天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
35 3
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
31 2
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
64 3
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
28 3
|
2月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在PHP开发中,通过使用策略模式,我们可以轻松切换算法或逻辑处理方式而无需修改现有代码结构。本文将深入探讨策略模式的定义、结构以及如何在PHP中实现该模式,并通过实际案例展示其应用价值和优势。
32 1