策略模式的小例子

原型是head first中的Duck例子,我根据我的理解又写了一遍

这是包的结构:
这里写图片描述

这里写图片描述
Demo.java

package cn.cdut.demo;

import cn.cdut.entity.LittleDuck;
import cn.cdut.entity.MechanicalDuck;
import cn.cdut.entity.RedDuck;

public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        RedDuck rd=new RedDuck();
        LittleDuck ld=new LittleDuck();
        MechanicalDuck md=new MechanicalDuck();
        System.out.println("a redduck says:");
        rd.swim();
        rd.fly();
        rd.quack();
        System.out.println();
        System.out.println("a litteduck says:");
        ld.swim();
        ld.fly();
        ld.quack();
        System.out.println();
        System.out.println("a mechanicalduck says:");
        md.swim();
        md.fly();
        md.quack();
    }

}

Duck.java

package cn.cdut.entity;

import cn.cdut.interfaces.FlyBehavior;
import cn.cdut.interfaces.QuackBehavior;

public abstract class Duck {
    public FlyBehavior flyBehavior;
    public QuackBehavior quackBehavior;

    public void swim(){
        System.out.println("Duck can swim");
    }

}

RedDuck.java

package cn.cdut.entity;

import cn.cdut.utils.FlyNormally;
import cn.cdut.utils.NormalQuack;

public class RedDuck extends Duck {

    public RedDuck(){
        quackBehavior=new NormalQuack();
        flyBehavior=new FlyNormally();
    }
    public void fly(){
        flyBehavior.fly();
    }
    public void quack(){
        quackBehavior.quack();
    }


}

LittleDuck.java

package cn.cdut.entity;

import cn.cdut.utils.NoWayFly;
import cn.cdut.utils.NormalQuack;

public class LittleDuck extends Duck {
    public LittleDuck(){
        flyBehavior=new NoWayFly();
        quackBehavior=new NormalQuack();
    }
    public void fly(){
        flyBehavior.fly();
    }
    public void quack(){
        quackBehavior.quack();
    }
}

MechanicalDuck.java

package cn.cdut.entity;

import cn.cdut.utils.FlyWithRocket;
import cn.cdut.utils.MechanicalQuack;

public class MechanicalDuck extends Duck {
    public MechanicalDuck(){
        flyBehavior=new FlyWithRocket();
        quackBehavior=new MechanicalQuack();
    }
    public void fly(){
        flyBehavior.fly();
    }
    public void quack(){
        quackBehavior.quack();
    }

}

FlyBehavior.java

package cn.cdut.interfaces;

public interface FlyBehavior {

        public void fly();
}

QuackBehavior.java

package cn.cdut.interfaces;

public interface QuackBehavior {
    public void quack();
}

FlyNormally.java

package cn.cdut.utils;

import cn.cdut.interfaces.FlyBehavior;

public class FlyNormally implements FlyBehavior {

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("I can fly just like a normal duck");

    }

}

FlyWithRocket.java

package cn.cdut.utils;

import cn.cdut.interfaces.FlyBehavior;

public class FlyWithRocket implements FlyBehavior {

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("I can fly fast,cuz i got a rocket");
    }

}

MechanicalQuack.java

package cn.cdut.utils;

import cn.cdut.interfaces.QuackBehavior;

public class MechanicalQuack implements QuackBehavior {

    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("quackeee quackee quackee");
    }

}

NormalQuack .java

package cn.cdut.utils;

import cn.cdut.interfaces.QuackBehavior;

public class NormalQuack implements QuackBehavior {

    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("quack quack quack");

    }

}

NoWayFly.java

package cn.cdut.utils;

import cn.cdut.interfaces.FlyBehavior;

public class NoWayFly implements FlyBehavior {

    @Override
    public void fly() {
        System.out.println("I can't fly now");

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值