设计模式1:找出应用中可能需要变化之处,把它们独立出来。
前景问题:
思考:
解决方案:
示例:假设要开发一个鸭子游戏,游戏中出现各种鸭子,一边游泳戏水,一边呱呱叫。
1.Duck基类(Duck.java)
- public abstract class Duck {
- FlyBehavior flyBehavior;
- QuackBehavior quackBehavior;
- public Duck(){
- }
- 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!");
- }
- }
2.FlyBehavior接口(FlyBehavior.java)
- public interface FlyBehavior {
- public void fly();
- }
3.两个行为是实现类
(FlyWithWings.java)
- public class FlyWithWings implements FlyBehavior{
- public void fly(){
- System.out.println("I'm flying!");
- }
- }
(FlyNoWay.java)
- public class FlyNoWay implements FlyBehavior{
- public void fly(){
- System.out.println("I can't fly");
- }
- }
4.QuackBehavior接口(QuackBehavior.java)及三个实现类
- public interface QuackBehavior {
- public void quack();
- }
(Quack.java)
- public class Quack implements QuackBehavior{
- public void quack(){
- System.out.println("Quack");
- }
- }
(MuteQuack)
- public class MuteQuack implements QuackBehavior{
- public void quack(){
- System.out.println("<<Silence>>");
- }
- }
(Squeak.java)
- public class Squeak implements QuackBehavior{
- public void quack(){
- System.out.println("Squeak");
- }
- }
5.子类(MallardDuck)
- public class MallardDuck extends Duck{
- public MallardDuck(){
- quackBehavior=new Quack();
- flyBehavior=new FlyWithWings();
- }
- public void display(){
- System.out.println("I'm a real Mallard duck.");
- }
- }
6.输出并编译测试类(MiniDuckSimulator.java)
- public class MiniDuckSimulator {
- public static void main(String[] args){
- Duck mallard=new MallardDuck();
- mallard.performQuack();
- mallard.performFly();
- mallard.display();
- }
- }
7.运行结果:
本文出自 “幸运的路易” 博客,请务必保留此出处http://luckylouis.blog.51cto.com/3627285/774737