java策略模式例子_java 登录场景 策略模式

java策略模式例子_java 登录场景 策略模式Java的策略模式中体现了两个非常基本面向对象的原则-封装变化的概念-编程中使用接口,而不是对接口的实现策略模式的定义定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响的变化策略模式的组成抽象策略角色–策略类,通常由一个接口或者抽象类实现具体策略角色–包装了相

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Java的策略模式中体现了两个非常基本面向对象的原则
-封装变化的概念
-编程中使用接口,而不是对接口的实现

策略模式的定义
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式使这些算法在客户端调用它们的时候能够互不影响的变化

策略模式的组成

抽象策略角色–策略类,通常由一个接口或者抽象类实现
具体策略角色–包装了相关算法和行为
环境角色–持有一个策略类的引用,最终给客户端调用的

策略模式的编写步骤
1、对策略对象定义一个公共的接口
2、编写策略类,该类实现上面的接口
3、在使用策略对象的类中保存一个对策略对象的引用
4、在使用策略对象的类中,实现策略对象的set和get方法或者使用构造方法赋值

例子

//策略类,定义一个抽象的算法,实现计算功能
public interface Strategy {

public int calcultate(int x,int y);

}

//具体策略角色,加法角色,实现加法功能
public class AddStrategy implements Strategy{

public int calcultate(int x, int y) {
    return x+y;
}

}

//具体策略角色,减法角色,实现减法功能
public class SubtractStrategy implements Strategy{

public int calcultate(int x, int y) {

    return x-y;
}

}

//环境角色
public class Environment {

private Strategy strategy;


public Environment(Strategy strategy){

    this.strategy=strategy;
}


public void setStrategy(Strategy strategy){

    this.strategy=strategy;
}

public int calcultate(int x,int y){

    return strategy.calcultate(x, y);
}

}

//客户端
public class Client {

public static void main(String[] args) {

    AddStrategy addStrategy=new AddStrategy();
    Environment environment=new Environment(addStrategy);
    System.out.println(environment.calcultate(3, 4));



    SubtractStrategy subtractStrategy=new SubtractStrategy();
    environment=new Environment(subtractStrategy);
    System.out.println(environment.calcultate(3, 4));

}

}

策略模式有什么好处?
策略模式的好处在于你可以动态的改变对象的行为。

缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类
造成很多策略类,用工厂模式解决

作业:

public class Person {

private int id;

private int age;

private String name;

}

要求:假如有若干个Person对象存在一个List当中,对它们进行排序,分别按照id、age、name进行排序(正常的倒序、升序),假如年龄或者姓名重复,则按照id排序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197240.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • leetcode 堆排序_leetcode合并两个有序数组

    leetcode 堆排序_leetcode合并两个有序数组给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输

    2022年8月8日
  • React Native技术篇—自定义Toast弹窗「建议收藏」

    React Native技术篇—自定义Toast弹窗「建议收藏」注意:未经允许不可私自转载,违者必究ReactNative官方文档:https://reactnative.cn/docs/getting-started/项目GitHub地址:https://github.com/zhouwei1994/nativeCase.git在写自定义Toast弹窗之前我们要先创建一个ReactNative第二视图层。创建教程:https://b…

    2022年9月25日
  • 在手写数字识别的例子中_关于人脸识别的案例

    在手写数字识别的例子中_关于人脸识别的案例1.概念介绍:图像识别(ImageRecognition)是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。 图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。机器学习领域一般将此类识别问题转化为分类问题。手写识别是常见的图像识别任务。计算机通过手写体图片来识别出图片中的字,与印刷字体不同的是,不同人的手写体风…

    2022年9月14日
  • 用Python分析2000款避孕套,得出这些有趣的结论

    用Python分析2000款避孕套,得出这些有趣的结论到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是:第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端。第二篇:淘宝自动登录2.0,新增Cookies序列化,教大家如何将cookies保存起来。第三篇:Python爬取淘宝商品避孕套,教大家如何爬取淘宝pc端商品信息。今天,我们来看看淘宝系列的第四篇我们在上一篇的时候已经将淘宝数据爬取下来了,…

    2022年5月25日
  • navicat 15 for my sql 激活码[最新免费获取]

    (navicat 15 for my sql 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL5S9V8F-eyJsaWNlbnNlSWQiOi…

    2022年3月27日
  • 一定要用相同的Context 对同一个receiver进行registerReceiver与unregisterReceiver吗?

    一定要用相同的Context 对同一个receiver进行registerReceiver与unregisterReceiver吗?最近在开发一些功能,突然想到在动态注册和反注册receiver的时候一定要用相同的context吗?我不敢肯定咨询了同事,得到的答案是不行的,然而为了进一步佐证他的观点我自己尝试了一下。也就是查了一下相关代码。众所周知android的应用程序在ActivityThread的publicstaticvoidmain(String[]args)中开始调用我们写的代码,Application、A

    2022年9月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号