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

    一、概述
    我们来实现一个企业的工资系统,该企业中不同级别的员工工资算法都不相同,针对该问题,最容易想到的莫过于在代码中堆积一大堆if…else…语句或者是switch…case…语句。如果该企业中不同级别的员工过多,或是对级别的调整比较频繁,那该系统就会显得复杂而脆弱。如何能将对象和算法解耦,从而使得在系统运行时能透明的改变对象的算法呢?这就到了策略模式大显身手的时候了。
    二、策略模式
    策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换。该模式可使得算法能独立于使用它的客户而变化。
    策略模式的结构图如下:

    Context代表需要改变算法的那个对象,它维护了一个对Strategy对象的引用,可以定义一个接口允许Strategy对象来访问它的数据。
    Strategy定义了所支持算法的公共接口,Context通过这个接口来调用ConcreteStrategy定义的算法。
    ConcreteStrategy实现了具体的算法。
    三、示例
    下面我们使用策略模式来实现本文开头提到的企业工资系统。
    首先定义算法的公共接口

    public interface Salary
        {
            int Caculator();
        }

    接着实现具体的算法

    public class ManagerSalary : Salary
        {
            public int Caculator()
            {
                return 1000;
            }
        }
    
        public class EmployeeSalary : Salary
        {
            public int Caculator()
            {
                return 800;
            }
        }

    然后定义那个需要动态改变算法的对象

    public class Employee
        {
            public Salary Salary {get;set;}
            public Employee(Salary salary)
            {
                Salary = salary;
            }
            public int GetSalary()
            {
                return Salary.Caculator();
            }
        }

    最后看一下如何调用

    static void Main(string[] args)
        {
            Employee employee = new Employee(new EmployeeSalary());
            Console.WriteLine("Employee salary is:{0}", employee.GetSalary().ToString());
            employee.Salary = new ManagerSalary();
            Console.WriteLine("Employee salary is:{0}", employee.GetSalary().ToString());
    
            Console.ReadLine();
        }

    这篇内容来自网络的相关整理,感觉通俗易懂,与大家共同分享咯!

  • 相关阅读:
    补 七月九日学习报告
    七月八日学习报告
    学习笔记164—层次聚类 Hierarchical Clustering
    学习笔记163—理解模型正则化:L1正则、L2正则(理论+代码)
    学习笔记162—Linear Regression vs Logistic Regression
    学习笔记161—win7C盘 虚拟内存移动到D盘或其他盘符
    学习笔记160—文献引文分析利器 HistCite 详细使用教程
    学习笔记159—电脑word文档回车表格随文字移动
    学习笔记158—INTRODUCTION TO LINEAR MIXED MODELS
    学习笔记157—Nipype的安装
  • 原文地址:https://www.cnblogs.com/wyh19941210/p/5071418.html
Copyright © 2011-2022 走看看