自我整理设计模式之策略模式(一)

一:策略模式(Strategy Pattern)
定义了算法镞,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

二:设计原则
多用组合 少用继承

三:实例

1.代码目录
在这里插入图片描述

/**
 * 模拟调用鸭子(策略模式--startegy pattern)
 */
public class MiniDuckSimulator {
	//主方法
	public static void main(String[] args) {	
		Duck mallard = new MallardDuck();
 	 	mallard.performFly();
  		mallard.performQuack();
 	 	mallard.display();
  		mallard.swim();
	}
}



/**
 * 鸭子的抽像类
 */
public abstract class Duck {
 
 FlyBehavior flyBehavior;//飞的行为
 QuackBehavior quackBehavior;//叫的行为
 
 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");
 }
}

/**
 * “叫” 的行为接口 *
 */
public interface QuackBehavior {
 public void quack();
}



/**
 * “飞”的行为接口 *
 */
public interface FlyBehavior {
 
 public void fly();
 
}

/**
*
*带翅膀的 飞的具体实现类
*/
public class FlyWithWings implements FlyBehavior {
	@Override
	public void fly() {
 	 	System.out.println("I'm flying !");
 	}
}

/**
*呱呱叫 叫的具体实现类
*/
public class Quack implements QuackBehavior {
	@Override
	public void quack() {
  		System.out.println("Quack ");
 	}
}

/**
 * 绿头鸭的实列
 */
public class MallardDuck extends Duck {
	 public  MallardDuck() {
  		quackBehavior = new Quack();//会呱呱叫
  		flyBehavior = new FlyWithWings();//会用翅膀飞
 	}
	@Override
	public void display() {
  		System.out.println("I am a real Mallard duck");
 	}
}


执行结果:在这里插入图片描述

以上代码 就可以创建 一只绿头鸭的对象了

如要扩展 不同飞行实现 和 不同叫声的实现 只需分别实现各自的接口

如拓展 出不会飞的,和只能沉默的鸭子

/**
* 飞的接口  不会飞的实现类
*/
public class FlyNoWay implements FlyBehavior {
	@Override
	public void fly() {
 	 	System.out.println("I can not fly");
 }
}

/**
* 叫的接口  沉默的实现
*/
public class MuteQuack implements QuackBehavior {
	@Override
	public void quack() {
  		System.out.println("<< Slience >>");
 }
}

这样可以各种组合 成不同行为的各类鸭子实体

/**
* 玩具鸭 不会飞 不会叫
*/
public class ToyDuck extends Duck {
  	public  ToyDuck() {
    		quackBehavior = new MuteQuack();//会呱呱叫
    		flyBehavior = new FlyNoWay();//会用翅膀飞
  	}
 	@Override
 	public void display() {
   	 	System.out.println("I am a real Mallard duck");
 	 }
}

设计模式 所涉及的代码和知识点 均来自以下参考书籍
本人尽将自己的学习内容整理在此,方便自己和大家一起查阅。
若要转载,复制粘贴 请标明来源。

《Head Firsts设计模式》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值