美文网首页
2020-05-10 设计模式入门 策略模式

2020-05-10 设计模式入门 策略模式

作者: ShawnPanCn | 来源:发表于2020-05-10 20:10 被阅读0次

    设计原则:

    找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起,把会变化的部分取出并封装起来,好让其他部分不会受到影响。

    针对接口编程,而不是针对实现编程。

    多用组合,少用继承

    因此,鸭子的行为将被放在分开的类——我们可以将其叫做“行为类”中,此类专门提供某行为接口的实现。针对接口编程的意思是针对超类型编程——变量的声明类型应该是超类,通常是一个抽象类或者一个接口,如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量,这也意味着,声明类时不用理会以后执行时的真正对象类型。

    针对实现编程 

    Dog d=new Dog(); 

    d.dark(); 

    针对接口编程 

    Animal animal=new Dog(); 

    animal.makesound(); 

    更好的针对接口编程

    a = getAnimal(); 

    a.makeSound();

    不得不针对具体实现coding 

    利用animal多态处理 

    运行时才指定具体实现的对象

    然后在超类的设计中,行为变量被声明为“接口”类型的变量,然后具体动作的方法由接口类型的变量相对应的方法所实现。子类中,构造函数中指明这些接口类型的变量具体对应的是哪一个具体实现。这样的话,通过一个“接口”类型的变量,灵活性就更高了,虽然此时在构造函数中我们还是引入了具体实现。

    进一步,我们希望可以自己设定具体的行为而不是在构造函数中写死,那么我们可以使用set method,通过向外提供接口来设置从超类那继承的接口类型的成员变量。

    最后我们来看看这个模式的定义:

    策略模式定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式让方法的变化独立于使用方法的客户。

    核心思想:将is-a 转换为has-a.

    基本的思路:将一些原先要继承的方法,以接口的方式抽象出来,然后再以实现该接口的方式定义一些类以完成实际能力的实现;同时在基类中以组合的方式将该接口的实例放入基类,基类同时提供设置这个实例的接口以及这个方法的封装,子类继承基类是对这些接口实例进行设置即可。

    相关文章

      网友评论

          本文标题:2020-05-10 设计模式入门 策略模式

          本文链接:https://www.haomeiwen.com/subject/uwlsnhtx.html