博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习——策略模式:模拟鸭子应用
阅读量:7237 次
发布时间:2019-06-29

本文共 1372 字,大约阅读时间需要 4 分钟。

hot3.png

策略模式

  1. 定义了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。(来自Head First设计模式)
  2. 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,具体类使用这个接口调用不同的算法,一般使用接口或抽象类实现。(来自百度百科)

策略模式类图

输入图片说明

策略模式使用场景

需要做一套模拟鸭子游戏,需要实现鸭子的飞行行为和呱呱叫行为,但是鸭子的飞行行为分为会费和不会飞,呱呱叫行为分为呱呱叫、吱吱叫(橡皮鸭)和不会叫。

场景类图类图

策略模式类图

代码实现

Duck: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!");	}}
MalardDuck:public class MalardDuck extends Duck{	public MalardDuck(){		quackBehavior = new Quack();		flyBehavior = new FlyWithSwing();	}	@Override	public void display() {		System.out.println("I'm a real malard duck.");			}}
FlyBehavior:public interface FlyBehavior {	public void fly();}
FlyWithSwing :public class FlyWithSwing implements FlyBehavior {	@Override	public void fly() {		System.out.println("i can fly with swing!");	}}
FlyNoWay:public class FlyNoWay implements FlyBehavior {	@Override	public void fly() {		System.out.println("i cann't fly!");	}}

Quack代码略...

测试:public class testDuck {	public static void main(String[] args) {		Duck duck = new MalardDuck();		duck.performFly();		duck.performQuack();	}}

测试结果:

i can fly with swing!quack quack quack ...

转载于:https://my.oschina.net/799835984/blog/795005

你可能感兴趣的文章
Linux存储管理及硬盘分区、格式化、挂载
查看>>
Linux服务器时间不准确
查看>>
【AD】清楚windows下的不同凭据缓存
查看>>
没有如果,只需要去尝试
查看>>
LINUX下删除用户与主目录
查看>>
Remote Listener Server side Connect-Time Load Balancing
查看>>
程序开发时编写sql语句的注意事项
查看>>
Oracle 12c新特性对于业务上的一些影响总结
查看>>
Xenserver HA功能配置文档
查看>>
lamp+rsyslog+loganalyzer的安装配置
查看>>
通联数据是如何使用Docker+Rancher构建自动发布管道的?
查看>>
c#调用cxf的代码
查看>>
Linux下openssh升级安装配置
查看>>
用python操作mysql数据库(之数据查询结果返回字典类型)
查看>>
activemq升级报错
查看>>
python 实现(简单的一个购物商城小程序)
查看>>
算法学习之路|微博转发抽奖
查看>>
MySQL 新特性应用JSON
查看>>
python操作mysql(一)MySQLdb模块安装和数据库基本操作
查看>>
centos7最小化安装需要安装软件
查看>>