陕西省建设网站,wordpress古文主题,如何修改WordPress备份中的网址,dz做的网站容易收录吗一.基本内容1 . 实例有各种鸭子#xff08;野鸭#xff0c;北京鸭子#xff0c;水鸭等#xff0c;鸭子有各种行为#xff0c;比如飞#xff0c;叫等显示鸭子的信息传统方法解决#xff1a;鸭子为抽象类#xff0c;具体鸭子继承抽象类2.传统方法的不足#xff1a;其他鸭…一.基本内容1 . 实例有各种鸭子野鸭北京鸭子水鸭等鸭子有各种行为比如飞叫等显示鸭子的信息传统方法解决鸭子为抽象类具体鸭子继承抽象类2.传统方法的不足其他鸭子都继承了抽象类所以fly让所有子类都会飞这不正确上面的问题其实是继承带来的问题对类的局部改动尤其超类的局部改动会影响其他部分会有溢出效应为了改进问题可以通覆盖fly方法解决 ---- 覆盖解决如果我们有一个玩具鸭子这样需要玩具鸭子覆盖所有的实现方法麻烦 解决方法 ----- 策略模式3 . Strategy Pattern 也叫政策模式定义算法族策略族分别封装起来让他们之间可以互相替换此模式让算法的变化独立于使用算法的客户4 . 体现了几个设计原则把变化的代码从不变的代码中分离出来针对接口编程而不是具体类定义了策略接口多用组合/聚合少用继承通过组合方式使用策略4.采用了面向对象的继承和多态机制5.优点算法可以自由切换实现抽象策略就成为策略家族的一个成员通过封装角色对其进行封装保证对外提供“可自由切换”的策略避免使用多重的条件判断使用策略简化操作避免了条件语句判断扩展性好6.缺点策略类数据增多所有的策略类对外暴露7.注意事项策略模式的关键是分析变化与不变的部分 核心思想是多元组合/聚合少用继承用行为类组合而不是行为的继承体现了“对修改关闭对扩展开放”的原则客户端增加行为不要修改源代码只要添加一种策略即可避免了使用多重转移语句提供了可以替换继承关系的方法将算法封装在独立的Strategy类中似的可以独立于Context改变他易于切换理解扩展每添加一个策略就就增加一个类当策略过多时就会导致类的数目庞大如果系统中的一个策略家族的具体策略数量超过4个。则需要考虑使用混合模式解决策略类膨胀和对外暴露的问题8.代码实现public interface Fly {
void fly();//子类具体实现
}public class GoodFly implements Fly{Override
public void fly() {System.out.println(飞翔技术非常好);
}}public class BadFly implements Fly{
Override
public void fly() {System.out.println(飞翔技术一般);
}}public class NoFly implements Fly{
Override
public void fly() {System.out.println(不会飞);
}}public abstract class Duck {
//属性策略接口
Fly fly;public Duck() {}public abstract void display();public void quack() {System.out.println(鸭子嘎嘎叫。。);
}
public void swim() {System.out.println(鸭子游泳);
}
public void fly() {//改进if(fly!null) {fly.fly();}
}
}
public class PekingDuck extends Duck{
public PekingDuck() {fly new NoFly();
}Override
public void display() {// TODO Auto-generated method stubSystem.out.println(北京鸭子);
}}public class ToyDuck extends Duck{
public ToyDuck() {fly new NoFly();
}
Override
public void display() {System.out.println(玩具鸭子);}
//重写父类的所有方法
public void quack() {System.out.println(玩具鸭子不能叫。。);
}
public void swim() {System.out.println(玩具鸭子不能游泳);
}
public void fly() {System.out.println(玩具鸭子不能飞);
}
}public class Client {
public static void main(String[] args) {WildDuck wduck new WildDuck();wduck.fly();PekingDuck pduck new PekingDuck();pduck.fly();
}
}9.应用Arrays使用了策略模式Arrays的Comparator就使用了策略模式多个类只区别在表现行为不同可以使用Strategy模式在运行时动态选择具体要执行的行为。需要在不同情况下使用不同的策略(算法)或者策略还可能在未来用其它方式来实现。 对客户隐藏具体策略(算法)的实现细节彼此完全独立。