• 商场促销——策略模式


    策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。

    面向对象的编程并不是类越多越好类的划分是为了封装但分类的基础是抽象具有相同属性和功能的对象的抽象集合才是类”。打一折和打九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的,所以打折算法应该是一类。

    Strategy类,定义所有支持的算法的公共接口。

    //抽象算法类
    abstract class Strategy{
        //算法方法
        public abstract void AlgorithmInterface();
    }

    ConcreteStrategy封装了具体的算法或行为,继承与Strategy

    //具体算法A
    class ConcreteStrategyA extends Strategy{
        //算法A实现方法
        public void AlgorithmInterface(){
            //算法A实现
        }
    }
    
    //具体算法B
    class ConcreteStrategyB extends Strategy{
        //算法B实现方法
        public void AlgorithmInterface(){
            //算法B实现
        }
    }
    
    //具体算法C
    class ConcreteStrategyC extends Strategy{
        //算法C实现方法
        public void AlgorithmInterface(){
            //算法C实现
        }
    }

    Context,用一个ConcreteStrategy来配置维护一个对Strategy对象的引用。

    //上下文
    class Context{
        Strategy strategy;
        public Context(Strategy strategy){
            this.strategy = strategy;
        }
        //上下文接口
        public void ContextInterface(){
            strategy.AlgorithmInterface();
        }
    }

    客户端代码

    static void Main(String[] args){
        Context context;
        
        context = new Context(new ConcreteStrategyA());
        context.ContextInterface();
        
        context = new Context(new ConcreteStrategyB());
        context.ContextInterface();
        
        context = new Context(new ConcreteStrategyC());
        context.ContextInterface;
        
    }

    策略模式是一种定义一系列算法的方法从概念上来看所有这些算法完成的都是相同的工作只是实现不同它可以以相同的方式调用所有的算法减少了各种算法与使用算法类之间的耦合

    策略模式就是用来封装算法的但在实践中发现可以用它来封装几乎任何类型的规则只要在分析过程中听到需要在不同时间应用不同的业务规则就可以考虑使用策略模式处理这种变化的可能性

  • 相关阅读:
    Linux2.6内核epoll介绍
    使用Mongodb 做对象缓存
    SilverLight创建全能wav播放器
    ASP.NET MVC 巧用代码注释做权限控制以及后台导航
    贝叶斯文本分类c#版
    Windows 2003 iis6 网站打不开,无法显示该页 找不到服务器错误解决方案
    mvc 权限控制续——使用存储过程判断
    使用贝叶斯做英文拼写检查(c#)
    修改Visata下的无线网卡(Intel 5100 agn)Mac地址
    银杏黄ARM项目总结
  • 原文地址:https://www.cnblogs.com/chuji1988/p/4245125.html
Copyright © 2020-2023  润新知