行为型设计模式应用(一)
一、实现过程及步骤
- 某软件公司欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征,需要模拟的飞机种类及其特征如下表所示:为将来能够模拟更多种类的飞机,试采用策略模式设计并模拟实现该飞机模拟系统。
飞机种类 | 起飞特征 | 飞行特征 |
---|---|---|
直升机(Helicopter) | 垂直起飞(VerticalTakeOff) | 亚音速飞行(SubSonicFly) |
客机(AirPlane) | 长距离起飞(LongDistanceTakeOff) | 亚音速飞行(SubSonicFly |
歼击机(Fighter) | 长距离起飞(LongDistanceTakeOff) | 超音速飞行(SuperSonicFly) |
鹞式战斗机(Harrier) | 垂直起飞(VerticalTakeOff) | 超音速飞行(SuperSonicFly) |
(1)策略模式设计:
策略模式是定义一系列算法,将每一个算法封装起来,并让它们可以相互替。首先设计一个环境类plane,用来设置所有的飞机类型,然后设计抽象策略类state,state类里面设计起飞特征和飞行特征的抽象方法,最后设计四个具体策略类,包括Helicopter、AirPlane、Fighter、Harrier,四个类中分别设置具体的起飞特征以及飞行特征,最后通过客户类Client去创建对象,调用对应的方法即可。
(2)UML类图如下:
(3)运行结果如下:
(4)主要代码如下:
环境类plane
package strategypattern;public class plane {private state state;public void settakeoffFeatures(state tFeatures) {this.state = tFeatures;} public void setplanetype(String type) {if(type == "直升机")state = new Helicopter();else if(type == "客机") {state = new AirPlane();}else if(type == "歼击机") {state = new Fighter();}else if(type == "鹞式战斗机") {state = new Harrier();}else {state = null;}} public void takeoff() {state.takeOff();} public void fly() {state.fly();}
}
抽象策略类state
package strategypattern;public interface state {public String takeOff();//起飞特征public String fly();//飞行特征
}
具体策略类Helicopter、AirPlane、Fighter、Harrier(此处只列举Helicopter)
package strategypattern;public class Helicopter implements state{public String takeOff() {System.out.println("直升机垂直起飞");return "直升机垂直起飞";} public String fly() {System.out.println("直升机亚音速飞行");return "直升机亚音速飞行";}
}
客户类Client
package strategypattern;public class Client {public static void main(String[] args) {plane helicopter = new plane();helicopter.setplanetype("直升机");helicopter.takeoff();helicopter.fly();plane airplane = new plane();airplane.setplanetype("客机");airplane.takeoff();airplane.fly();plane fighter = new plane();fighter.setplanetype("歼击机");fighter.takeoff();fighter.fly();plane harrier = new plane();harrier.setplanetype("鹞式战斗机");harrier.takeoff();harrier.fly(); }
}
- 某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(前向和后向)遍历。绘制类图并编程实现。
(1)迭代器模式设计:
首先设计一个抽象迭代器Iterator类,里面包含聚合的抽象迭代方法,然后设计两个具体迭代器类MyIterator和MyIterator2,这两个迭代器分别实现向后遍历和向前遍历的方法,然后再设计一个抽象聚合类 GoodsStore,里面设计一个获取迭代器的方法,然后再设计一个具体聚合类MyGoodsStore类,用来初始化聚合中的元素,以及获取不同的迭代器,最后通过客户类创建对象并选择相应的迭代器进行聚合的遍历。
(2)UML类图如下:
(3)运行结果如下:
(4)主要代码如下:
抽象迭代器Iterator类
package iteratorpattern;public interface Iterator {public boolean hasNext();public Object Next();
};
具体迭代器类MyIterator和MyIterator2(此处只列举MyIterator)
public class MyIterator implements Iterator{int index;public boolean hasNext(){if(index < names.length){return true;}return false;}public Object Next(){if(this.hasNext()){return names[index++];}return null;}}
抽象聚合类 GoodsStore
package iteratorpattern;public interface GoodsStore {public Iterator getMyIterator();
}
具体聚合类MyGoodsStore类
public class MyGoodsStore implements GoodsStore{public String names[]={"铅笔","钢笔","圆珠笔","水彩笔","毛笔","圆规","橡皮"};public Iterator getMyIterator(){return new MyIterator();}public Iterator getMyIterator2(){return new MyIterator2();}
客户类Client
package iteratorpattern;public class Client {public static void main(String[] args) {MyGoodsStore mygoodsstore = new MyGoodsStore();System.out.println("向后遍历:");for(Iterator ite = mygoodsstore.getMyIterator();ite.hasNext();){String name = (String)ite.Next();System.out.println(""+name);}System.out.println("*******");System.out.println("向前遍历:");for(Iterator ite = mygoodsstore.getMyIterator2();ite.hasNext();){String name = (String)ite.Next();System.out.println(""+name);}}
}
行为型设计模式应用(一)相关推荐
- 技术图文:02 创建型设计模式(下)
创建型设计模式(下) 知识结构: 图1 知识结构 单例模式 – 确保对象的唯一性 Sunny 软件公司承接了一个服务器负载均衡软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量 ...
- 技术图文:02 创建型设计模式(上)
创建型设计模式(上) 知识结构: 图1 知识结构 简单工厂模式 Sunny 软件公司欲基于 C# 语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,如: 柱状图(histogram) ...
- 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. 中介者模式又 ...
- 模板方法模式 Template method 行为型 设计模式(二十六)
模板方法模式 Template method 上图为网上百度的一份简历模板截图 相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为你的 ...
- 创建型设计模式对比总结 设计模式(八)
创建型模式是new 的一种替代方式,可以将对象的创建与具体的类型进行分离 目前已经介绍了5种创建型设计模式(如果简单工厂算一种的话,那就是6种) 分别是: 简单工厂模式.工厂方法模式.抽象工厂模式.建 ...
- java面向对象程序设计第三版_JAVA面向对象程序设计之创建型设计模式
[本文详细介绍了JAVA面向对象程序设计中的创建型设计模式,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 什么是设计模式 设计模式( Design pattern )是一套被反复使用.多数 ...
- 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)
观察者模式 Observer 意图 定义对象一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并自动更新. 别名:依赖(Dependents),发布订阅(Publish-Su ...
- 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 第1章 Python的创建型设计模式...
本节书摘来自华章出版社<Python编程实战:运用设计模式.并发和程序库创建高质量程序>一 书中的第1章,第1.1节,作者:(美) Mark Summerfield,更多章节内容可以访问云 ...
- 从框架源码中学习创建型设计模式
文章目录 从框架源码中解读创建型设计模式 工厂模式 案例一:RocketMQ源码-创建Producer生产者 案例二:RocketMQ源码-创建过滤器工厂 抽象工厂 案例一:Dubbo源码-创建缓存的 ...
- java设计模式之行为型设计模式
行为型设计模式: 责任链(Chain of Responsibility): 用途:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求 ...
最新文章
- 【python】Series和DataFrame的简单介绍
- codeforces 1027 B - Numbers on the Chessboard(规律)
- 【转】WebSocket初探
- 选择日期保存报错Invalid JSON input: Cannot deserialize value of type `java.util.Date` from String......
- RaabitMQ:rabbitmqctl的几个命令
- 设计模式--单例模式--Java实现
- 【已解决】手机“此设备已安装证书授权中心,您的安全网络流量可能被监控”怎么办?
- Mac下搭建react及bable
- gitbook安装与使用
- 如何设置pycharm代码字体
- VMware14安装步骤
- 撰写论文时如何复制参考文献公式----Mathpix及Mathtype教程
- python查找单词的位置_Python实现单词查询文件查找
- openlayers划线、标记点
- npm 包管理及 registry 或 proxy 配置
- 二、浙江专升本高等数学考点-极限
- 简谈 Intel altera 和 Xilinx 的 FPGA 区别
- 狂神css视频笔记1-15课
- 全球及中国有机食品市场供需规模与未来竞争态势研究报告2022版
- 2021-2027全球与中国汽车曲轴位置传感器市场现状及未来发展趋势
热门文章
- http://wenku.baidu.com/view/f9b3b08a680203d8ce2f2452.html
- 物联通服务器提示授权文件,管家婆物联通,手机上查看应收应付数据
- windows装linux无u盘安装,u盘无人值守安装linux操作系统
- centos检测不到磁盘_centos7 安装时候检测不到空余硬盘的解决办法
- GitHub入门使用指南
- 为什么90%的“码农”做不了“架构师”?
- doolittle分解matlab,如何理解选主元的Doolittle分解法
- 蜜拓蜜董事长参加《2018.让世界爱上中国造》国际高端论坛
- 5月26日第壹简报,星期四,农历四月廿六
- python+Unittest+ddt 自动化测试