找回密码
 立即注册
首页 业界区 业界 java 策略模式

java 策略模式

啖曼烟 2025-6-9 09:00:58
策略模式(Strategy Pattern)
  指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。将每个算法封装在独立的类中,使得它们可以互相替换。可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。
  主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
  关键代码:实现同一个接口。
  优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
  缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。 3、客户端知道所有的算法或行为的情况。
  注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
  组成:
    1.抽象策略角色: 策略类,通常由一个接口或者抽象类实现。    2.具体策略角色:包装了相关的算法和行为。    3.环境角色:持有一个策略类的引用,最终给客户端调用。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。======================================================== 以上八股文 来源  网络拼凑 ======================================================================注 :  上述所谓的 算法  不仅仅代表 冒泡排序,归并排序,二分查找  等这种具体的算法,  也代表 某些 业务逻辑,方法运行策略等(不要狭义的看问题)  举个简单小栗子:    当操作数据库时(抽象策略角色), 用到了 增删改查  (具体策略角色)四种 方式, 通过id 查询 , 通过id 修改, 通过 id 删除, 增加一个 id  数据 (维护当前使用 策略的对象【环境角色】)。
  1. /**
  2. * 操作数据库时(抽象策略角色)
  3. */
  4. public interface OperateStrategy {
  5.     String operation(String id);
  6. }
  7. /**
  8. * insert操作 (具体策略角色)
  9. */
  10. public class OperateInsert implements OperateStrategy{
  11.     @Override
  12.     public String operation(String id) {
  13.         return "insert into  success !!  id ==" + id ;
  14.     }
  15. }
  16. /**
  17. * Select操作
  18. */
  19. public class OperateSelect implements OperateStrategy{
  20.     @Override
  21.     public String operation(String id) {
  22.         return "select success !!  id ==" + id ;
  23.     }
  24. }
  25. /**
  26. * Delete操作
  27. */
  28. public class OperateDelete implements OperateStrategy{
  29.     @Override
  30.     public String operation(String id) {
  31.         return "delete success !!  id ==" + id ;
  32.     }
  33. }
  34. /**
  35. * Update操作
  36. */
  37. public class OperateUpdate implements OperateStrategy{
  38.     @Override
  39.     public String operation(String id) {
  40.         return "update success !!  id ==" + id  ;
  41.     }
  42. }
  43. /**
  44. * Context 执行上下文(环境角色)
  45. */
  46. public class OperateContext {
  47.     private OperateStrategy operateStrategy;
  48.     public OperateContext(OperateStrategy operateStrategy){
  49.         this.operateStrategy = operateStrategy;
  50.     }
  51.     public String execute(String id){
  52.         return operateStrategy.operation(id);
  53.     }
  54. }
  55.     //执行
  56.     public static void main(String[] args) {
  57.         OperateContext context = new OperateContext(new OperateSelect());
  58.         System.out.println(context.execute("select01"));
  59.         context = new OperateContext(new OperateDelete());
  60.         System.out.println(context.execute("delete01"));
  61.         context = new OperateContext(new OperateUpdate());
  62.         System.out.println(context.execute("update01"));
  63.         context = new OperateContext(new OperateInsert());
  64.         System.out.println(context.execute("Insert01"));
  65.     }
复制代码
结果:
1.png

 
==========================================收工=================================================================================
 
 
         
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册