`
rodneytt
  • 浏览: 11785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

策略模式

阅读更多
策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法 的变化独立于使用算法的客户。

具体内容见:Head First设计模式

鸭子模型:鸭子有两种行为:飞,叫。
定义飞的接口
public interface FlyBehavior {
	public void fly();
}
public class FlyNoWay implements FlyBehavior {

	/* (non-Javadoc)
	 * @see com.zen.dp.strategy.FlyBehavior#fly()
	 */
	@Override
	public void fly() {
		System.out.println("我不会飞");
	}

}
public class FlyWithWings implements FlyBehavior {

	/* (non-Javadoc)
	 * @see com.zen.dp.strategy.FlyBehavior#fly()
	 */
	@Override
	public void fly() {
		System.out.println("我会飞");
	}

}
定义叫的接口
public interface QuackBehavior {
	public void quack();
}
public class Quack implements QuackBehavior {

	/* (non-Javadoc)
	 * @see com.zen.dp.strategy.QuackBehavior#quack()
	 */
	@Override
	public void quack() {
		System.out.println("我会呱呱叫");
	}

}
public class MuteQuack implements QuackBehavior {

	/* (non-Javadoc)
	 * @see com.zen.dp.strategy.QuackBehavior#quack()
	 */
	@Override
	public void quack() {
		System.out.println("我不会叫");
	}

}
定义鸭子抽象类
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 setFlyBehavior(FlyBehavior fb){
		flyBehavior = fb;
	}
	public void setQuackBehavior(QuackBehavior qb){
		quackBehavior = qb;
	}
}
具体鸭子
public class ModelDuck extends Duck {

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.zen.dp.strategy.Duck#display()
	 */
	@Override
	public void display() {
		System.out.println("我是一只模型鸭子");
	}
	public ModelDuck() {
		flyBehavior = new FlyNoWay();
		quackBehavior = new Quack();
	}

}
测试
public class TestDuck {
	public static void main(String[] args) {
		Duck mduck = new ModelDuck();
		mduck.performFly();
		mduck.performQuack();
		mduck.display();
		FlyBehavior fb = new FlyWithWings();
		QuackBehavior qb = new MuteQuack();
		mduck.setFlyBehavior(fb);
		mduck.setQuackBehavior(qb);
		mduck.performFly();
		mduck.performQuack();
	}
}



分享到:
评论

相关推荐

    策略模式结合模板方法模式

    策略模式结合模板方法模式的设计思路 策略模式结合模板方法模式是策略模式的一种变形,目的是为了解决策略模式中的一些共性问题。在策略模式中,经常会出现这样一种情况,就是发现这一系列算法的实现上存在公共功能...

    详解SpringBoot结合策略模式实战套路

    SpringBoot结合策略模式实战套路 策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,...

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    桥接模式和策略模式是软件设计模式中的两种重要模式,它们在实现上有着相似之处,但各自的应用场景和设计理念有所不同。下面将详细阐述这两种模式的特点、区别以及它们在实际编程中的应用。 首先,桥接模式(Bridge...

    设计模式之策略模式 鸭子问题

    设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...

    策略模式在实际项目中的应用二

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通过定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式通常用于处理多种...

    Spring下使用策略模式

    在Spring框架中,策略模式是一种常见的设计模式,它允许我们定义一组可互换的策略,这些策略可以在运行时根据需求动态选择。这篇文章将深入探讨如何在Spring中运用策略模式,并结合源码分析其工作原理。 策略模式的...

Global site tag (gtag.js) - Google Analytics