策略模式

  策略模式:
  1.
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起

  2.针对接口编程,而不是针对实现编程。(代码有弹性,不会绑定的死死的)
  3.多用组合,少用继承。(组合两个接口)

  一个鸭子的例子说明: 鸭子有fly,quack和swim三个特性,不是所有的鸭子都会飞或者一样飞,不是所有的鸭子都能叫或叫一样,所以这两个特性可以分离出来,而swim是共有的,直接在抽象类里面实现!
 

//策略模式,鸭的父类

public abstract class Duck {

       //为行为接口类型声明两个引用变量,所有鸭子子类都继承它们

       FlyBehavior flyBehavior;

       QuackBehavior quackBehavior;

       public void performFly() {

              flyBehavior.fly();// 委托给行为类

       }

       public void performQuack() {

              quackBehavior.quack();// 委托给行为类

       }

       public abstract void display();

       public void swim() {

              System.out.println(所有的鸭都会游泳,只要是鸭就可以!);

       }

       public void setFlyBehavior(FlyBehavior flyBehavior) {

              this.flyBehavior = flyBehavior;

       }

       public void setQuackBehavior(QuackBehavior quackBehavior) {

              this.quackBehavior = quackBehavior;

       }

}

//封装飞行行为,所有飞行行为类必须实现的接口

public interface FlyBehavior {

       public void fly();

}

//这是飞行行为的实现,有三个飞法,三个实现

public class FlyWithWings implements FlyBehavior {

       public void fly() {

              System.out.println(我在飞,我是真会飞的鸭子.);

       }

}

public class FlyNoWay implements FlyBehavior {

       public void fly() {

              System.out.println(我不会飞,我是不会飞的鸭子.);

       }

}

public class FlyRocketPowered implements FlyBehavior {

       public void fly() {

              System.out.println(我利用火箭,才飞起来的!);

       }

}

//封装呱呱叫行为

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(“<<Silence>>”);

       }

}

public class Squeak implements QuackBehavior {

       public void quack() {

              System.out.println(“Squeak”);

       }

}

//子类一,野鸭

public class MallarDuck extends Duck {

       public void display () {

              System.out.println(我是MallarDuck);

       }

       public MallarDuck() {

              flyBehavior = new FlyWithWings();

              quackBehavior = new Quack();

       }

}

 // 子类二,模型鸭

public class ModelDuck extends Duck {

       public void display() {

              System.out.println(我是模型鸭!);

       }

       public ModelDuck() {

              flyBehavior = new FlyNoWay();

              quackBehavior = new Quack();

       }

} 

  Okay,对这个模式差不多,再到design pattern书里面多补充点理论知识~

  今天主要把observer模式完成了!确实威力无穷,它是java GUI的核心概念之一了差不多,所有的actionListener都用到它,actionPerformed方法相当于observer中的update方法。而那些组件中的addActionListener相当于addObserver方法。
  不容易,用了这么久的swing,今天终于彻底理解了其中事件的运作方式!嗯,一个进步!
  明天要上课了,两节!momo!看来design pattern要稍微停一下!bless!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s