README
策略模式:
总:
策略模式:分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。
原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为的变化独立于算法的使用者
人话:分别抽象出行为和主体之间;行为用接口和子类实现的方式;
主体使用抽象类,使用模板方法和抽象方法的方式,(使用多态继承接口)
心中有图

e.g.具体要求如下:有各种鸭子(比如 野鸭、北京鸭、水鸭等), 鸭子有各种行为(比如 叫、飞行等),<br /> 要求管理鸭子并显示鸭子的信息。【鸭子是主体,飞行,叫等是行为】(1)传统方式:<br /> 1)coding:<br /> 【1】编写一个父类<br /> 【2】通过继承的方式继承父类的每一个方法<br /> 2)问题和改进方法:<br /> (1)其它鸭子都继承了 Duck 类,所以 fly 让所有子类都会飞了,这是不正确的<br /> (2)上面说的问题(1),其实是继承带来的问题:对类的局部改动,尤其是超类的局部改动,<br /> 会影响其他部分,会有溢出效应(所有的子类都被影响)<br /> (3)为了改进问题(1),我们可以通过覆盖 fly 方法来解决 => 覆盖解决<br /> (4)问题又来了,如果我们有一个玩具鸭子 ToyDuck, 这样就需要 ToyDuck 去覆盖 Duck<br /> 的所有实现的方法 => 解决思路:策略模式 (strategy pattern)(核心思想—将继承换成聚合/组合)<br /> (2)策略模式:<br /> 1)coding:<br /> 【1】抽象出行为和主体之间的关系,<br /> 【2】编写行为接口,<br /> 【3】实现行为接口,<br /> 【4】编写主体抽象类,将行为接口聚合其中,使用构造方法传参(多态),<br /> 区分通用的模板方法,和需要子类重写的方法,编写对应的抽象方法,和普通方法<br /> 【5】编写子类去继承父类的,实现抽象方法2)注意事项和细节<br /> 1)策略模式的关键是:分析项目中的变化部分与不变部分<br /> (2)策略模式的核心思想是:多用组合/聚合 少用继承;用行为类组合,<br /> 而不是行为的继承;更有弹性<br /> (3)体现了“对修改关闭,对扩展开放”原则,客户端增加行为不用修改原有代码,<br /> 只需要添加一种策略(或者行为) 即可,避免了使用多重转移语句(if..else if..else)<br /> (4)提供了可以替换继承关系的办法:策略模式将算法封装在独立的Strategy 类中使得你可以<br /> 独立于其Context 改变它,使它易于切换、易于理解、易于扩展<br /> (5)需要注意的是:每添加一个策略就要增加一个类,当策略过多是会导致类数目庞大
Duck.javaFlyBehavior.javaGoodFlyBehavior.javaWildDuck.java
Client.java
