策略

 

        //策略模式
        static void Behavior()
        
{
            CushContext cc 
= new CushContext();
            CushSuper cs 
= null;
            Console.Write(
"请输入价格 ");
            
string douPrice = Console.ReadLine();
            Console.Write(
"请输入数量 ");
            
string douNum = Console.ReadLine();
            Console.Write(
"请选择收费类型;0正常收费,1打折,2买300送100n");
            
string strType = Console.ReadLine();
            
switch (strType)
            
{
                
case "0":
                    cs 
= new CushSuperNormal();
                    
//cs = (CushSuper)Assembly.Load("Head First Desig").CreateInstance("Head_First_Desig.CushSuperNormal");
                    break;
                
case "1":
                    cs 
= new CushSuperRebate("0.8");
                    
break;
                
case "2":
                   
// cs = new CushReturn(300, 100);
                    break;
            }

            cc.setBehavior(cs);
            
double result = cc.GetResult(double.Parse(douPrice) * double.Parse(douNum));
            Console.Write(
"应收费:" + result.ToString());
            Console.Read();

        }

        
//

 

using System;
using System.Collections.Generic;
using System.Text;

namespace Head_First_Desig
{
   
public abstract class CushSuper
    
{
        
public abstract double acceptCush(double money);


    }

    
class CushSuperNormal : CushSuper
    
{
        
public override double acceptCush(double money)
        
{
            
return money;
        }

    }


     
class CushSuperRebate : CushSuper
    
{
        
private double rebate = 1d;
        
public CushSuperRebate(string Rebate)
        
{
            
this.rebate = double.Parse(Rebate);
        }

        
public override double acceptCush(double money)
        
{
            
return money * rebate;
        }

    }

     
class CushReturn : CushSuper
    
{
        
private double condition = 0.0d;
        
private double moneyReturn = 0.0d;
         
public CushReturn(string Condition, string MoneyReturn)
         
{
             
this.condition = double.Parse(Condition);
             
this.moneyReturn = double.Parse(MoneyReturn);
         }

        
public override double acceptCush(double money)
        
{
            
double result = 0.0d;
            
if (money > condition)
            
{
                result 
= money - Math.Floor(money / condition) * moneyReturn;
            }

            
return result;
        }

    }

    
class CushFactory
    
{
        
public static CushSuper createCushAccept(string type)
        
{
            CushSuper cs 
= null;
            
switch (type)
            
{
                
case "0":
                    cs 
= new CushSuperNormal();
                    
break;
                
case "1":
                    cs 
= new CushSuperRebate("0.8");
                    
break;
                
case "2":
                    
//cs = new CushReturn(300, 100);
                    break;
            }

            
return cs;
        }

    }

}

 

 

using System;
using System.Collections.Generic;
using System.Text;

namespace Head_First_Desig
{
    class CushContext
    {
        //声明一个现金收费父类对象
        private CushSuper cs;
        //设置策略行为,参数为具体的现金收费子类(正常,打折或返利)
        public void setBehavior(CushSuper cs)
        {
            this.cs = cs;
        }
        //得到现金促销计算结果(利用了多态机制,不同的策略行为导致不同的结果)
        public double GetResult(double money)
        {
            return cs.acceptCush(money);
        }
    }
}

 


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值