软考之设计模式(策略)

            略模模式是定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

   自己对这句话的理解是,针对一个问题,在不同环境下,根据实际情况,所得出解决的方式不同。我们将这些解决的方式,每一个都封装起来。根据外部因素,进行选择性使用。

    下面举一个超市购物的例子来理解策略模式的好处。

    假如说,到超市购物,平常时间,在超市结账时都是,买了多少钱的东西,就应该付多少钱。而现在正好赶上五一劳动节,超市经理想搞一个打折活动进行促销,这是商场的收银系统就满足不了超市的需求了,那怎么办呢?改代码吗?这样太麻烦了,如果促销时间过了,不打折了,我们难道还得将原来改动的代码在改回来吗?还有如果经理还想进行返利的促销活动的话,那样还得去改动代码?这样来回的改动代码?不仅不方便,还容易出现错误,并且这违背了设计模式的开放封闭原则。那要怎样才不违反开放封闭原则呢?那就要用到我开头写道策略模式。

     现在超市不是有3种结账的方式吗?他们都是做结账的事,那么我们就可以将他们共同点结账进行抽象,建立一个结账的抽象类,然后用这三种方式去继承它。如下图。

   

      图中的Context是根据传递进来的参数,来选择具体的策略模式。

 

     代码:

 

<span style="font-size:18px;">namespace ConsoleApplication1
{
    class Program
    {
        //客户端
        static void Main(string[] args)
        {
            Context context;
            context = new Context(new  checkoutStartegeA());
            context.ContextInterface();

            context = new Context(new checkoutStartegeB());
            context.ContextInterface();

            context = new Context(new checkoutStartegeC());
            context.ContextInterface();

            Console.Read();
        }
    }

    //抽象类
    abstract class CheckOutStartegy
    {
        //抽象结账算法
        public abstract void checkoutInterface();
    }
    //具体实现
    class checkoutStartegeA : CheckOutStartegy { 
    
        //正常收费
        public override void checkoutInterface()
        {
           Console.WriteLine("正常收费");
        }
    
    }
    class checkoutStartegeB : CheckOutStartegy
    {

        //正常收费
        public override void checkoutInterface()
        {
            Console.WriteLine("返利收费");
        }

    }
    class checkoutStartegeC : CheckOutStartegy
    {

        //正常收费
        public override void checkoutInterface()
        {
            Console.WriteLine("打折收费");
        }

    }
    class Context {
        CheckOutStartegy checkoutstartegy;
        //初始策略
        public Context(CheckOutStartegy checkoutstartegy) {

            this.checkoutstartegy = checkoutstartegy;
        
        }
    //根据上下文接口
        public void ContextInterface() {

            checkoutstartegy.checkoutInterface();
        
        }
    
    
    
    }
}
</span>

    使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,同时他能降低代码的冗余,方便了后期的维护操作。

 

 

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值