设计模式(DesignPattern)之策略模式(Strategy)
2007-12-02 16:28
381 查看
Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
OO原则是我们的目标,而设计模式是我们的做法。
把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用它们。
除非你很积极地让神经元活动起来,否则你的头脑里什么也不会发生。
学得更快、更深入,集中注意力,怎样思考的?学习方法?
Dog d = new Dog();
d.bark();
Animal animal = new Dog();
annimal.bark();
a = getAnimal();
a.makeSound();
public class Duck ...{
QuackBehavior quackBehavior;
//还有更多
public void performQuack() ...{
quackBehavior.quack();
}
}
public class MallardDuck extends Duck ...{
public MallardDuck() ...{
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public display() ...{
System.out.println("I'm a real Mallard duck");
}
}
public abstract class Duck ...{
FlyBehavior flyBehavior;
QuackBehavior quackbehavior;
public Duck() ...{
}
public abstract void display();
public void peformFly() ...{
flyBehavior.fly();
}
public void peformQuack() ...{
quackBehavior.quack();
}
public void swim() ...{
System.out.println("All ducks float, even decoys!");
}
}
public interface FlyBehavior ...{
public void fly();
}
public class FlyWithWings implements FlyBehavior ...{
public void fly() ...{
System.out.println("I'm flying!");
}
}
public class FlyNoWay implements FlyBehavior ...{
public void fly() ...{
System.out.println("I can't fly");
}
}
public interface QuackBehavior ...{
public void quack();
}
public class Quack implements QuackBehavior ...{
public void quack() ...{
System.out.println("Quack");
}
}
public class MuteQuack implements QuackBehavior ...{
public void quack() ...{
System.out.println("Squeak");
}
}
-->
public class MiniDuckSimulator ...{
public static void main(String[] args) ...{
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
}
}
==>
Quack
I'm flying!
#动态设定行为
public void setFlyBehavior(FlyBehavior fb) ...{
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb) ...{
quackBehavior = qb;
}
public class ModelDuck extends Duck ...{
public ModelDuck() ...{
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
public void display() ...{
System.out.println("I'm a model duck");
}
}
public class FlyRocketPowered implements FlyBehavior ...{
public void fly() ...{
System.out.println("I'm flying with a rocket!");
}
}
public class MiniDuckSimulator ...{
public static void main(String[] args) ...{
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}
==>
Quack
I'm flying!
I can't fly
I'm flying with a rocket!
时刻思考着:模式如何依赖基础与原则
OO原则:
1.找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。
OO原则是我们的目标,而设计模式是我们的做法。
把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用它们。
除非你很积极地让神经元活动起来,否则你的头脑里什么也不会发生。
学得更快、更深入,集中注意力,怎样思考的?学习方法?
Dog d = new Dog();
d.bark();
Animal animal = new Dog();
annimal.bark();
a = getAnimal();
a.makeSound();
public class Duck ...{
QuackBehavior quackBehavior;
//还有更多
public void performQuack() ...{
quackBehavior.quack();
}
}
public class MallardDuck extends Duck ...{
public MallardDuck() ...{
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public display() ...{
System.out.println("I'm a real Mallard duck");
}
}
public abstract class Duck ...{
FlyBehavior flyBehavior;
QuackBehavior quackbehavior;
public Duck() ...{
}
public abstract void display();
public void peformFly() ...{
flyBehavior.fly();
}
public void peformQuack() ...{
quackBehavior.quack();
}
public void swim() ...{
System.out.println("All ducks float, even decoys!");
}
}
public interface FlyBehavior ...{
public void fly();
}
public class FlyWithWings implements FlyBehavior ...{
public void fly() ...{
System.out.println("I'm flying!");
}
}
public class FlyNoWay implements FlyBehavior ...{
public void fly() ...{
System.out.println("I can't fly");
}
}
public interface QuackBehavior ...{
public void quack();
}
public class Quack implements QuackBehavior ...{
public void quack() ...{
System.out.println("Quack");
}
}
public class MuteQuack implements QuackBehavior ...{
public void quack() ...{
System.out.println("Squeak");
}
}
-->
public class MiniDuckSimulator ...{
public static void main(String[] args) ...{
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
}
}
==>
Quack
I'm flying!
#动态设定行为
public void setFlyBehavior(FlyBehavior fb) ...{
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb) ...{
quackBehavior = qb;
}
public class ModelDuck extends Duck ...{
public ModelDuck() ...{
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
public void display() ...{
System.out.println("I'm a model duck");
}
}
public class FlyRocketPowered implements FlyBehavior ...{
public void fly() ...{
System.out.println("I'm flying with a rocket!");
}
}
public class MiniDuckSimulator ...{
public static void main(String[] args) ...{
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}
==>
Quack
I'm flying!
I can't fly
I'm flying with a rocket!
时刻思考着:模式如何依赖基础与原则
OO原则:
1.找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。
相关文章推荐
- Java设计模式之_Strategy(策略)_DesignPattern
- 设计模式新概念一~IStrategyPattern(策略模式)—详解
- 设计模式入门之策略模式Strategy
- 设计模式(3)-策略模式(Strategy)
- 设计模式(九):策略模式Strategy(行为型模式)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式之七:Strategy(策略)—对象行为型模式
- HeadFirst设计模式学习笔记(C#版):鸭子与策略(Strategy)模式
- 设计模式笔记2:策略模式
- 设计模式之美:Strategy(策略)
- .NET策略(Strategy)模式
- C++设计模式--Strategy策略模式
- [转]Java策略模式(Strategy模式) 之体验
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 策略模式(Strategy) 6
- Java 设计模式-策略模式(Strategy)Android讲解
- Strategy 策略模式
- 设计模式之(Strategy)策略模式
- 设计模式之策略模式(Strategy Model)
- 策略(Strategy)模式