Head First设计模式一:策略模式
前言:最近在看Head First设计模式,有所收获记录总结一下,今天说一下策略模式解决的问题。
1 需求:
2 功能:
策略模式设计(使用StartUML的ER随手画的不规范凑合看):
3 实例讲解:废话不多说举一个小黄鸭的例子,上代码
1 package com.alibaba.strategy; 2 3 /** 4 * 鸭子类 -- 策略模式超类 5 * 6 * @author Mr.Tk 7 * @date 2019/3/09 16:25 8 */ 9 public abstract class Duck { 10 11 /** 12 * 飞行行为 13 */ 14 FlyBehavior flyBehavior; 15 16 /** 17 * 叫声行为 18 */ 19 QuackBehavior quackBehavior; 20 21 public Duck() { 22 23 } 24 25 /** 26 * 鸭子的颜色 27 */ 28 public abstract void display(); 29 30 /** 31 * 委托执行飞行方法 32 */ 33 public void performFly() { 34 flyBehavior.fly(); 35 } 36 37 /** 38 * 委托执行叫声方法 39 */ 40 public void performQuack() { 41 quackBehavior.quack(); 42 } 43 44 /** 45 * 游泳方法 46 */ 47 public void swim() { 48 System.out.println("鸭子在游泳,请勿打扰。烧烤请左转..."); 49 } 50 51 }
package com.alibaba.strategy;/*** 鸭子的飞行,行为接口** @author Mr.Tk* @date 2019/3/09 16:28*/ public interface FlyBehavior {void fly(); }
package com.alibaba.strategy; /*** 鸭子叫声,行为接口** @author Mr.Tk* @date 2019/3/09 16:29*/ public interface QuackBehavior {void quack(); }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.FlyBehavior; 4 5 /** 6 * 展翅高飞 7 * 8 * @author Mr.Tk 9 * @date 2019/3/09 16:29 10 */ 11 public class FlyWithwings implements FlyBehavior { 12 @Override 13 public void fly() { 14 System.out.println("展翅高飞的鸭子。。。"); 15 } 16 }
package com.alibaba.strategy.impl;import com.alibaba.strategy.FlyBehavior;/*** 不会飞行的鸭子** @author Mr.Tk* @date 2019/3/09 16:29*/ public class FlyNoWay implements FlyBehavior {@Overridepublic void fly() {System.out.println("本鸭不会飞,告辞。。。");} }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.QuackBehavior; 4 /** 5 * 鸭子叫 6 * 7 * @author Mr.Tk 8 * @date 2019/3/09 16:46 9 */ 10 public class Quack implements QuackBehavior { 11 @Override 12 public void quack() { 13 System.out.println("鸭子叫声。。。"); 14 } 15 }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.QuackBehavior; 4 /** 5 * 不会叫的鸭子 6 * 7 * @author Mr.Tk 8 * @date 2019/3/09 16:46 9 */ 10 public class MuteQuack implements QuackBehavior { 11 @Override 12 public void quack() { 13 System.out.println("鸭子不会叫。。。"); 14 } 15 }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.QuackBehavior; 4 5 /** 6 * 吱吱叫的鸭子 7 * 8 * @author Mr.Tk 9 * @date 2019/3/09 16:46 10 */ 11 public class Squeak implements QuackBehavior { 12 @Override 13 public void quack() { 14 System.out.println("吱吱叫的鸭子。。。"); 15 } 16 }
1 package com.alibaba.strategy; 2 3 import com.alibaba.strategy.impl.FlyWithwings; 4 import com.alibaba.strategy.impl.Quack; 5 6 /** 7 * 小黄鸭 8 * 9 * @author Mr.Tk 10 * @date 2019/3/09 16:51 11 */ 12 public class YellowDuck extends Duck { 13 14 public YellowDuck() { 15 quackBehavior = new Quack(); 16 flyBehavior = new FlyWithwings(); 17 } 18 19 @Override 20 public void display() { 21 System.out.println("烧烤小黄鸭。。。"); 22 } 23 }
1 package com.alibaba.strategy; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 //创建小黄鸭 7 Duck yellowDuck = new YellowDuck(); 8 //飞起来 9 yellowDuck.performFly(); 10 //叫起来 11 yellowDuck.performQuack(); 12 //游泳 13 yellowDuck.swim(); 14 //展示 15 yellowDuck.display(); 16 } 17 }
展翅高飞的鸭子。。。 鸭子叫声。。。 鸭子在游泳,请勿打扰。烧烤请左转... 烧烤小黄鸭。。。Process finished with exit code 0
4 说一下优缺点
5 缺点
转载于:https://www.cnblogs.com/yuxiaoming/p/10501598.html
Head First设计模式一:策略模式相关推荐
- Java设计模式之策略模式与状态模式
一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...
- 换个姿势学设计模式:策略模式
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...
- 研磨设计模式之 策略模式--转
http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式 2010-09-09 作者:云飞龙行 来源:云飞龙行的blog 先感谢众多朋友的支持 ...
- 设计模式:策略模式(Strategy)
定 义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...
- C++设计模式之策略模式(Strategy)
Strategy策略模式 作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: 代码实现 #include <iostream& ...
- python策略模式包含角色_详解Python设计模式之策略模式
虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...
- 一篇博客读懂设计模式之-----策略模式
设计模式之策略模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决:在有多种算法相似的情况下 ...
- 面向对象设计模式之策略模式
面向对象设计模式之策略模式 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2.抽象鸭子类,鸭子飞行行为在此处类似于算法族 1 package ...
- java策略模式详解_Java经典设计模式之策略模式原理与用法详解
本文实例讲述了Java经典设计模式之策略模式.分享给大家供大家参考,具体如下: 策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式 ...
- 策略设计模式_设计模式之策略模式总结
再上一篇文章<设计模式之策略模式>中,我们通过模拟鸭子项目,了解了什么是策略模式,怎么使用策略模式.本文将通过鸭子项目的学习,对策略模式进行总结. 策略模式: 分别封装行为接口,实现算法族 ...
最新文章
- 超细粒度分析XLNet中神奇的Attention Mask
- 每日程序C语言25-查找100以内的素数
- Union与Union All的区别
- Eclipse+MyEclipse+Tomcat下配置建立Web Project
- SpringBoot源码篇:Spring5内置tomcat实现code-based的web.xml实现
- php游戏充值平台源码,PHP平台源码下载-PHP第四方支付平台源码pc端下载
- Hyper-V固定虚拟机IP
- mysql中两点之间距离的计算
- Ucenter实现多个网站同步登录
- 人工智能如何自我进化
- rc时间常数定义_rc电路时间常数的定义及计算
- Vue3-歌词根据时间自动滚动
- 数据库与身份认证(学习笔记)
- xp系统显示错误1053服务器,使用故障恢复控制台解决XP系统无法启动的常见故障...
- 扫码反馈,“码”上回复:二维码在业主意见反馈中的应用
- 千年鸿蒙盼尔来兮,古言爱情誓言
- 【网址】在线手册/手册网
- 英飞凌硅麦可以接收到超声波吗?
- 全栈修炼:如何从Web前端迈向全栈开发
- Service id not legal hostname (service_cmn)
热门文章
- php怎样连接上数据库服务器,php怎样连接数据库
- yum 安装boost
- web前端技术基础课程讲解之浅谈对soket的理解
- matplotlib之scatter
- 安装opencv3.4.0报错
- Ansible 入门:安装 简例 playbook应用
- typescript设置默认值_TypeScript输入参数的默认值一例,以及对应生成的JavaScript代码分析...
- 系统管理员最应该读的5本书_系统管理员的8本书
- vco为什么低频下起振困难_为什么协作如此困难?
- node Express 框架