Java 实现策略模式

   最近因为工作上的需求研究了一下策略者模式,所以写了个实例,下面是思想图:


主要的思想是多用组合少用继承,将行为抽象出来成对象。

下面是代码:

1.CelueModule

/**
 * Created by saicy on 2017/3/31.
 */
public class CelueModule {
    public static void main(String[] args) {
    	Duck duck = new RedDuck(new FlyWay(),new Quack());
    	duck.fly();
    	duck.quak();
    	Duck duck2 = new RubberDuck(new FlyNoWay(),new SQuack());
    	duck2.fly();
    	duck2.quak();
    }
}

2.Duck

/**
 * 鸭子类(策略模式)
 * Created by saicy on 2017/3/31.
 */
public abstract class Duck {
    //将鸭子的飞行行为封装起来,使用组合的来实现,这样的话会比较灵活。
    private   FlyBehavior flyBehavior;
    //将鸭子的叫声行为封装起来,使用组合的方式来实现,这样的话会比较灵活。
    private  QuakBehavior quakBehavior;
    
    public abstract void fly();

    public abstract void quak();
}
3.FlyBehavior

/**
 * 飞行接口
 * Created by saicy on 2017/3/31.
 */
public interface FlyBehavior {
    public void fly();
}
4.FlyNoWay

/**
 * 实现飞行接口的不会飞类
 * Created by saicy on 2017/3/31.
 */
public class FlyNoWay implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("不会飞!");
    }
}
5.FlyWay

/**
 * 实现飞行的能飞接口
 * Created by saicy on 2017/3/31.
 */
    public class FlyWay implements  FlyBehavior{

        @Override
        public void fly() {
            System.out.println("实现鸭子的飞行!");
        }
    }

6.Quack

/**
 * Created by saicy on 2017/3/31.
 */
public class Quack implements QuakBehavior{

    @Override
    public void quak() {
        System.out.println("呱呱叫!");
    }
}

7.QuakBehavior

/**
 * 鸭子叫声动作
 * Created by saicy on 2017/3/31.
 */
public interface QuakBehavior {
    void quak();
}
8.RedDuck

/**
 * 红头鸭
 * Created by saicy on 2017/3/31.
 */
public class RedDuck extends Duck {
	//将鸭子的飞行行为封装起来,使用组合的来实现,这样的话会比较灵活。
    private   FlyBehavior flyBehavior;
    //将鸭子的叫声行为封装起来,使用组合的方式来实现,这样的话会比较灵活。
    private  QuakBehavior quakBehavior;
	
    public RedDuck(FlyBehavior flyBehavior, QuakBehavior quakBehavior) {
		super();
		this.flyBehavior = flyBehavior;
		this.quakBehavior = quakBehavior;
	}
    
    public FlyBehavior getFlyBehavior() {
		return flyBehavior;
	}
	public void setFlyBehavior(FlyBehavior flyBehavior) {
		this.flyBehavior = flyBehavior;
	}
	public QuakBehavior getQuakBehavior() {
		return quakBehavior;
	}
	public void setQuakBehavior(QuakBehavior quakBehavior) {
		this.quakBehavior = quakBehavior;
	}
	@Override
	public void fly() {
		flyBehavior.fly();
	}
	@Override
	public void quak() {
		quakBehavior.quak();
	}
}
10.RubberDuck

public class RubberDuck extends Duck {
	//将鸭子的飞行行为封装起来,使用组合的来实现,这样的话会比较灵活。
    private   FlyBehavior flyBehavior;
    //将鸭子的叫声行为封装起来,使用组合的方式来实现,这样的话会比较灵活。
    private  QuakBehavior quakBehavior;
	    
    
	public RubberDuck(FlyBehavior flyBehavior, QuakBehavior quakBehavior) {
		super();
		this.flyBehavior = flyBehavior;
		this.quakBehavior = quakBehavior;
	}
	public FlyBehavior getFlyBehavior() {
		return flyBehavior;
	}
	public void setFlyBehavior(FlyBehavior flyBehavior) {
		this.flyBehavior = flyBehavior;
	}
	public QuakBehavior getQuakBehavior() {
		return quakBehavior;
	}
	public void setQuakBehavior(QuakBehavior quakBehavior) {
		this.quakBehavior = quakBehavior;
	}
	@Override
	public void fly() {
		flyBehavior.fly();
	}
	@Override
	public void quak() {
		quakBehavior.quak();
	}
}

11.SQuack

/**
 * 橡皮鸭叫
 * Created by saicy on 2017/3/31.
 */
public class SQuack implements QuakBehavior{

    @Override
    public void quak() {
        System.out.println("橡皮鸭叫");
    }
}


下面是输出结果:



本代码是本人原创,谢谢大家的支持!~




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值