设计模式——策略模式


    策略模式是一种定义一些类算法的方法,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法与使用算法类之间的耦合!

    我理解的策略模式就是把它比作一个大型的工厂,里面有很多的部门,每个部门都有不同的功能,但是这些部件组合到一起才能让工厂达到最高的生产收益!但是每个部门之间也有相同之处和不同之处,它们的工作基本上都是相同的,但是方法是不同的。

下面我举个自己写的小例子,欢迎大家吐槽:

    就拿汽车来说,汽车就相当于一个大型的工厂,汽车的离合,油门,刹车,档,方向盘........各个方面的部件都是配合让汽车完成各种动作的,它们的工作最终目的都是让车行驶条件。


   abstract class drive
    {
       //定义一个行驶的方法
       public abstract void driving();

    }

每个汽车上的部件都能完成不同的功能

    class advance:drive 
    {
        public override void driving()
        {
            Console .WriteLine ("前进");
        }
    }

    class back_car : drive 
    {
        public override void driving()
        {
            Console.WriteLine("倒车");
        }
    }
    class expedite : drive 
    {
         public override void driving()
        {
            Console.WriteLine("加速");
        }
    }
  可是问题出现了,有这么多功能,我们不能每次想到想到什么功能就把所有的方法都写一遍吧,这样既加大了我们的工作量,而且出错率也会很高,策略模式就很好的解决了这个问题,把所有的方法都封装到一起,想用什么方法就直接调用就行了,而且每个方法之间不会相互影响。

    class car
    {
        drive driving;
        public car(drive driving)
        {
            this.drive = driving;
        }
        //上下文接口
        public void control_car()
        {
            drive.driving();

        }
    }

客户端代码:

    class people
    {
        static void Main(string[] args)
        {
            car car;
            car = new car(new back_car());
            car.control();
            car car;
            car = new car(new expedite ());
            car.control();
            car car;
            car = new car(new advance ());
            car.control();
            Console.Read();
        }
    }

总结:

     策略模式的有点是在保证算法没有错误时,修改其中一个算法可以不影响其他的算法的正常使用,如果要用到这个算法的时候直接调用就行,增加或者删除算法都很方便,就像汽车上的刹车,倒车档,前进挡,油门,它们都可以看成不同的算法,每个算法的功能是不一样的,但是当我使用其中任何一个是不会影响其他的使用!

     总觉得自己的理解还不是很到位,敲过一遍书上的例子,感觉自己的收获很少,看过之前很多人总结这块的博客,互相学习了下,觉得还是自己举一个例子来理解是最好的,可能有点牵强,欢迎大家指点批评!


评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值