zoukankan      html  css  js  c++  java
  • 设计模式一策略模式

    前言
      对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法。比如一个人的
      是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。

    主要解决
    在有多种算法相似的情况下,使用 if...else 或 switch...case 所带来的复杂性和臃肿性。

    抽象策略(Strategy)类:
    定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,
        环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。

    具体策略(Concrete Strategy)类:
    实现了抽象策略定义的接口,提供具体的算法实现。
    环境(Context)类:
    持有一个策略类的引用,最终给客户端调用。
     1 public class Strategy {
     2     public static void main(String[] args) {
     3         Context context = new Context(new add());
     4         int i = context.toCalculate(1, 2);
     5         System.out.println(i);
     6     }
     7 }
     8 
     9 //抽象策略
    10 abstract class calculate {
    11     public abstract int toCalculate(int a, int b);
    12 }
    13 
    14 //具体策略
    15 class add extends calculate {
    16     @Override
    17     public int toCalculate(int a, int b) {
    18         return a + b;
    19     }
    20 }
    21 
    22 class sub extends calculate {
    23     @Override
    24     public int toCalculate(int a, int b) {
    25         return a - b;
    26     }
    27 }
    28 
    29 //环境
    30 class Context {
    31     //封装了策略
    32     private calculate cal;
    33 
    34     public Context(calculate cal) {
    35         this.cal = cal;
    36     }
    37 
    38     public int toCalculate(int a, int b) {
    39         return cal.toCalculate(a, b);
    40     }
    41 }
  • 相关阅读:
    洛谷P5661 公交换乘(二分)
    洛谷P4047 [JSOI2010]部落划分(最小生成树)
    洛谷P2872 [USACO07DEC]Building Roads S(最小生成树)
    卸载重装VirtualBox回滚报错
    POJ1151 Atlantis(扫描线+线段树+离散化)
    QT入门-信号槽拓展
    Vue模板语法与常用指令总结
    Vue 生命周期
    querySelector和getElementById方法的区别
    ES6 Class(类)的继承与常用方法
  • 原文地址:https://www.cnblogs.com/loveer/p/11286075.html
Copyright © 2011-2022 走看看