书上的例子1:
package com.jane.Strategy;
/**
* Created by jane on 16/5/29.
*/
interface FlyBehavior{
public void fly();
}
interface QuackBehavior{
public void quack();
}
class FlyWithWings implements FlyBehavior{
@Override
public void fly(){
System.out.println("I'm flying!");
}
}
class Quack implements QuackBehavior{
@Override
public void quack() {
System.out.println("Quack");
}
}
class MuteQuack implements QuackBehavior{
@Override
public void quack() {
System.out.println("<<Silence>>");
}
}
class Squeak implements QuackBehavior{
@Override
public void quack() {
System.out.println("Squeak");
}
}
class FlyNoWay implements FlyBehavior{
@Override
public void fly() {
System.out.println("I can't fly");
}
}
abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
public void performQuack(){
quackBehavior.quack();
}
public void swim(){
System.out.println("All ducks float,even decoys!");
}
}
class MallardDuck extends Duck{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public MallardDuck(){
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public void display(){
System.out.println("I'm a real Mallard duck");
}
}
public class MiniDuckSmulator{
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
}
}
运行结果:
《Head First 设计模式》这书不错,虽然搞半天没看明白
书上总结的要点:
1、知道OO记住,并不在于让你设计出良好的OO系统
2、良好的OO设计必须具备可复用、可扩充、可维护三个特性
3、模式可以让我们建造出具有良好OO设计质量的系统
4、模式被认为是历经验证的OO设计经验
5、模式不是代码,而是针对设计问题的通用解决方案,你可把它们应用到特定的应用中
6、模式不是被发明,而是被发现
7、大多数的模式和原则都允许系统局部改变独立于其它部分
8、我们常把系统中会变化的部分抽出来封装
9、模式让开发人员之间有共享的语言,能够最大化沟通的价值
谷歌到的策略模式相关文章,回头看
http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html