一、实现过程及步骤

  1. 某软件公司欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征,需要模拟的飞机种类及其特征如下表所示:为将来能够模拟更多种类的飞机,试采用策略模式设计并模拟实现该飞机模拟系统。
飞机种类 起飞特征 飞行特征
直升机(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();       }
}
  1. 某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(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);}}
}

行为型设计模式应用(一)相关推荐

  1. 技术图文:02 创建型设计模式(下)

    创建型设计模式(下) 知识结构: 图1 知识结构 单例模式 – 确保对象的唯一性 Sunny 软件公司承接了一个服务器负载均衡软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量 ...

  2. 技术图文:02 创建型设计模式(上)

    创建型设计模式(上) 知识结构: 图1 知识结构 简单工厂模式 Sunny 软件公司欲基于 C# 语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,如: 柱状图(histogram) ...

  3. 中介者模式 调停者 Mediator 行为型 设计模式(二十一)

    中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. 中介者模式又 ...

  4. 模板方法模式 Template method 行为型 设计模式(二十六)

    模板方法模式 Template method 上图为网上百度的一份简历模板截图 相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为你的 ...

  5. 创建型设计模式对比总结 设计模式(八)

    创建型模式是new 的一种替代方式,可以将对象的创建与具体的类型进行分离 目前已经介绍了5种创建型设计模式(如果简单工厂算一种的话,那就是6种) 分别是: 简单工厂模式.工厂方法模式.抽象工厂模式.建 ...

  6. java面向对象程序设计第三版_JAVA面向对象程序设计之创建型设计模式

    [本文详细介绍了JAVA面向对象程序设计中的创建型设计模式,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 什么是设计模式 设计模式( Design pattern )是一套被反复使用.多数 ...

  7. 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)

    观察者模式 Observer 意图 定义对象一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并自动更新. 别名:依赖(Dependents),发布订阅(Publish-Su ...

  8. 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 第1章 Python的创建型设计模式...

    本节书摘来自华章出版社<Python编程实战:运用设计模式.并发和程序库创建高质量程序>一 书中的第1章,第1.1节,作者:(美) Mark Summerfield,更多章节内容可以访问云 ...

  9. 从框架源码中学习创建型设计模式

    文章目录 从框架源码中解读创建型设计模式 工厂模式 案例一:RocketMQ源码-创建Producer生产者 案例二:RocketMQ源码-创建过滤器工厂 抽象工厂 案例一:Dubbo源码-创建缓存的 ...

  10. java设计模式之行为型设计模式

    行为型设计模式: 责任链(Chain of Responsibility): 用途:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求 ...

最新文章

  1. 【python】Series和DataFrame的简单介绍
  2. codeforces 1027 B - Numbers on the Chessboard(规律)
  3. 【转】WebSocket初探
  4. 选择日期保存报错Invalid JSON input: Cannot deserialize value of type `java.util.Date` from String......
  5. RaabitMQ:rabbitmqctl的几个命令
  6. 设计模式--单例模式--Java实现
  7. 【已解决】手机“此设备已安装证书授权中心,您的安全网络流量可能被监控”怎么办?
  8. Mac下搭建react及bable
  9. gitbook安装与使用
  10. 如何设置pycharm代码字体
  11. VMware14安装步骤
  12. 撰写论文时如何复制参考文献公式----Mathpix及Mathtype教程
  13. python查找单词的位置_Python实现单词查询文件查找
  14. openlayers划线、标记点
  15. npm 包管理及 registry 或 proxy 配置
  16. 二、浙江专升本高等数学考点-极限
  17. 简谈 Intel altera 和 Xilinx 的 FPGA 区别
  18. 狂神css视频笔记1-15课
  19. 全球及中国有机食品市场供需规模与未来竞争态势研究报告2022版
  20. 2021-2027全球与中国汽车曲轴位置传感器市场现状及未来发展趋势

热门文章

  1. http://wenku.baidu.com/view/f9b3b08a680203d8ce2f2452.html
  2. 物联通服务器提示授权文件,管家婆物联通,手机上查看应收应付数据
  3. windows装linux无u盘安装,u盘无人值守安装linux操作系统
  4. centos检测不到磁盘_centos7 安装时候检测不到空余硬盘的解决办法
  5. GitHub入门使用指南
  6. 为什么90%的“码农”做不了“架构师”?
  7. doolittle分解matlab,如何理解选主元的Doolittle分解法
  8. 蜜拓蜜董事长参加《2018.让世界爱上中国造》国际高端论坛
  9. 5月26日第壹简报,星期四,农历四月廿六
  10. python+Unittest+ddt 自动化测试