java设计模式
链接
入门
设计模式是人们在面对同类型软件工程设计问题所总结出的一些有用经验。模式不是代码,而是某类问题的通用设计解决方案。
策略模式
- 分别封装行为接口,实现算法族,超类里存放行为接口对象,在子类中具体设定行为对象。原则就是:分离变化部分,分装接口,基于接口编程各种功能。此模式让行为算法的变化独立于算法的使用者。
第一步:将不同行为封装为接口,通过实现接口的方式将不同的行为表现出来。
public interface FlyBehavior { //接口
void fly();
}
/* --------------------------下面为接口的实现-------------*/
public class GoodFly implements FlyBehavior {
public void fly() {
System.out.println("good fly");
}
}
第二步:创建抽象类
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){};
public void Fly() {
flyBehavior.fly();
}
public void Quack() {
quackBehavior.Quack();
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
public abstract void display();
}
第三步:继承抽象类,并在构造函数中利用面向对象的特征-多态实现不同行为表现
public class GreenDuck extends Duck {
public GreenDuck() {
flyBehavior = new GoodFly();
quackBehavior = new GoodQuack();
}
public void display() {
System.out.println("green duck");
}
}
第四步:创建实例对象时使用超类对象实现
public class Run {
public static void main(String[] args) {
Duck redDuck = new RedDuck();
Duck greenDuck = new GreenDuck();
redDuck.display();
redDuck.Fly();
redDuck.Quack();
greenDuck.display();
greenDuck.Fly();
greenDuck.Quack();
}
}
最后结果
Red Duck
bad fly
good qucak
green duck
good fly
good qucak
green duck
no quack
no fly
策略模式注意点
1.分析项目中变与不变的部分
2,多用组合少用继承;用行为类组合,而不是行为的继承。更有弹性。
3.设计模式有没有相应的库进行使用?有些库或者框架本身就用某种设计模式设计的