zoukankan      html  css  js  c++  java
  • 设计模式总结篇系列:策略模式(Strategy)

    前面的博文中分别介绍了Java设计模式中的创建型模式和结构型模式。从本文开始,将分别介绍设计模式中的第三大类,行为型模式。首先我们了解下分为此三大类的依据。

    创建型模式:主要侧重于对象的创建过程;

    结构型模式:主要侧重于处理类或对象的组合;

    行为型模式:主要侧重于类或对象之间的交互以及职责分配。

    首先了解下策略模式的概念:定义了多个算法,并将它们封装起来(一般的是每个算法封装成一个单独的类),让算法独立于客户端而可以单独变化。

    具体可以看一下下面的例子(以计算加、减、乘为例):

    1. 对加、减、乘每个算各自封装成一个类,首先定义其共同的接口:

    1 interface ICalculator{
    2     
    3     public int calculator(int a, int b);
    4 
    5 }

    2. 分别定义加、减、乘算法类:

    1 class Plus implements ICalculator {
    2 
    3     @Override
    4     public int calculator(int a, int b) {
    5         return a + b;
    6     }
    7 
    8 }
    1 class Minus implements ICalculator {
    2 
    3     @Override
    4     public int calculator(int a, int b) {
    5         return a - b;
    6     }
    7 
    8 }
    1 class Multiply implements ICalculator {
    2 
    3     @Override
    4     public int calculator(int a, int b) {
    5         return a * b;
    6     }
    7 
    8 }

    3. 定义上下文环境类,用于封装各个算法类操作:

     1 class Context{
     2     
     3     private ICalculator iCalculator;
     4     
     5     public Context(ICalculator iCalculator){
     6         this.iCalculator = iCalculator;
     7     }
     8     
     9     public int calculator(int a, int b){
    10         return iCalculator.calculator(a, b);
    11     }
    12     
    13 }

    4. 测试:

    1 public class StrategyTest {
    2 
    3     public static void main(String[] args) {
    4         Context context = new Context(new Plus());
    5         context.calculator(2, 3);
    6     }
    7 
    8 }
  • 相关阅读:
    反向代理与正向代理
    vs2017 调试时出现 cannot connect to runtime process错误
    .net core 配置swagger遇到的坑
    VC++下使用ADO操作数据库
    [转] CSS transition
    Javascript 函数和模块定义
    Service 如何知道caller
    [转] json in javascript
    [转] 让ctags支持Javascript
    [转] 使用NVM快速搭建NODE开发环境
  • 原文地址:https://www.cnblogs.com/lwbqqyumidi/p/3769085.html
Copyright © 2011-2022 走看看