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

    策略模式,其用意是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使得他们可以相互替换,策略模式使得算法可以在不影响到客户端的情况下发生变化。

     

    策略模式结构


       策略模式中有三个对象:
    1       环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
    2       抽象策略对象:它可由接口或抽象类来实现。
    3       具体策略对象:它封装了实现同不功能的不同算法。

     //环境角色 

            public class Context{  

                private Strategy strategy;             

               //策略方法  

    1.             public void contextInterface(){  
    2.                 strategy.strategyInterface();  
    3.             }  
    4.         }  
    5.           
    6.         //抽象策略类  
    7.         public abstract class Strategy{  
    8.             //策略方法  
    9.             public abstract void strategyInterface();  
    10.         }   
    11.           
    12.         //具体策略类  
    13.         public class ConcreteStrategy extends Strategy{  
    14.             public void strategyInterface(){  
    15.                 //............  
    16.             }  
    17.         }  
    18.           
    19.     二、一个图书折扣店的例子  
    20.         //抽象折扣类  
    21.         public abstract class DiscountStrategy{  
    22.             private single price = 0;  
    23.             private int copies = 0;  
    24.               
    25.             //策略方法  
    26.             public abstract single calculateDiscount();  
    27.               
    28.             public DiscountStrategy(single price , int copies){  
    29.                 this.price = price;  
    30.                 this.copies = copies;  
    31.             }  
    32.         }  
    33.           
    34.         //具体折扣类(没有折扣)  
    35.         public class NoDiscountStrategy extends DiscountStrategy{  
    36.             private single price = 0;  
    37.             private int copies = 0;  
    38.               
    39.             public  NoDiscountStrtegy(single price, int copies){  
    40.                 this.price = price;  
    41.                 this.copies = copies;  
    42.             }  
    43.               
    44.             public single calculateDiscount(){  
    45.                 return 0;  
    46.             }  
    47.         }  
    48.           
    49.         //  
    50.         public class FlatRateStrategy extends DiscountStrategy{  
    51.             private single price = 0;  
    52.             private int copies = 0;  
    53.             private single amount;  
    54.               
    55.             public FlatRateStrategy(single price , int copies){  
    56.                 this.price = price;  
    57.                 this.copies = copies;  
    58.             }  
    59.               
    60.             public single getAmount(){  
    61.                 return amount;  
    62.             }  
    63.               
    64.             public void setAmount(single amount){  
    65.                 this.amount = amount;  
    66.             }  
    67.               
    68.             public single calculateDiscount(){  
    69.                 return copies*amount;  
    70.             }  
    71.         }  
    72.           
    73.         //  
    74.         public class PercentageStrategy extends DiscountStrategy{  
    75.             private single percent;  
    76.             private single price = 0;  
    77.             private int copies = 0;  
    78.               
    79.             public PercentageStrategy(single price , int copies){  
    80.                 this.price = price;  
    81.                 this.copies = copies;  
    82.             }  
    83.               
    84.             public single getPercent(){  
    85.                 return percent;  
    86.             }  
    87.               
    88.             public void setPercent(single percent){  
    89.                 this.percent = percent;  
    90.             }  
    91.               
    92.             public single calculateDiscount(){  
    93.                 return copies*price*percent;  
    94.             }  
    95.         }  

     

  • 相关阅读:
    《Effective C#》读书笔记——条目22:通过定义并实现接口替代继承<使用C#表达设计>
    《Effective C#》读书笔记——条目23:理解接口方法和虚方法的区别<使用C#表达设计>
    《Effective C#》读书笔记——条目27:让类型支持序列化<使用C#表达设计>
    《Effective C#》读书笔记——条目28:提供粗粒度的互联网API<使用C#表达设计>
    《Effective C#》读书笔记——条目21:限制类型的可见性<使用C#表达设计>
    《Effective C#》读书笔记——条目24:用委托实现回调<使用C#表达设计>
    C# 温故知新 基础篇(1) C#概述
    《Effective C#》读书笔记——条目26:避免返回对内部类对象的引用<使用C#表达设计>
    《有关程序员的性别、年龄、个性、编程方法的话题》(2010/01/31)
    《程序员应该掌握的实用编程技能2》(2010/01/23)
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1935886.html
Copyright © 2011-2022 走看看