软考------(抽象类、接口) 策略设计模式(strategy) 应用
某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表5-1所示。



#include <iostream>
#include <string>
using namespace std; class FlyBehavior
{
public:
virtual void fly31()=;
};
class SubSonicFly:public FlyBehavior
{
public:
void fly31()
{cout<<"亚音速飞行"<<endl;}
};
class SuperSonicFly:public FlyBehavior
{
public:
void fly31()
{cout<<"超音速飞行"<<endl;}
}; class TakeOffBehavior
{
public:
virtual void takeoff31()=;
};
class VerticalTakeOff:public TakeOffBehavior
{
public:
void takeoff31()
{cout<<"垂直起飞"<<endl;}
};
class LongDistanceTakeOff:public TakeOffBehavior
{
public:
void takeoff31()
{cout<<"长距离起飞"<<endl;}
}; class AirCraft
{
protected:
FlyBehavior *flyBehavior;
TakeOffBehavior *takeOffBehavior;
public:
void fly31()
{flyBehavior->fly31();}
void takeoff31()
{takeOffBehavior->takeoff31();}
};
class Helicopter:public AirCraft
{
public:
Helicopter()
{
flyBehavior=new SubSonicFly();
takeOffBehavior=new VerticalTakeOff();
}
~Helicopter()
{
if(!flyBehavior)
delete flyBehavior;
if(!takeOffBehavior)
delete takeOffBehavior;
}
}; int main()
{
Helicopter *x=new Helicopter();
x->fly31();
x->takeoff31();
return ;
}
运行结果:

java 代码实现:
interface FlyBehavior
{
public void fly31();
}
class SubSonicFly implements FlyBehavior
{
public void fly31()
{System.out.println("亚音速飞行");}
}
class SuperSonicFly implements FlyBehavior
{
public void fly31()
{System.out.println("超音速飞行");}
} interface TakeOffBehavior
{
public void takeoff31();
}
class VerticalTakeOff implements TakeOffBehavior
{
public void takeoff31()
{System.out.println("垂直起飞");}
}
class LongDistanceTakeOff implements TakeOffBehavior
{
public void takeoff31()
{System.out.println("长距离起飞");}
} class AirCraft
{
protected FlyBehavior flyBehavior;
protected TakeOffBehavior takeOffBehavior;
public void fly31()
{flyBehavior.fly31();}
public void takeoff31()
{takeOffBehavior.takeoff31();}
}
class Helicopter extends AirCraft
{
public Helicopter()
{
flyBehavior=new SubSonicFly();
takeOffBehavior=new VerticalTakeOff();
}
} public class dev
{
public static void main(String [] args)
{
Helicopter x=new Helicopter();
x.fly31();
x.takeoff31();
}
}

软考------(抽象类、接口) 策略设计模式(strategy) 应用的更多相关文章
- 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...
- 设计模式的征途—18.策略(Strategy)模式
俗话说条条大路通罗马,很多情况下实现某个目标地途径都不只一条.在软件开发中,也会时常遇到这样的情况,实现某一个功能有多条途径,每一条途径都对应一种算法.此时,可以使用一种设计模式来实现灵活地选择解决途 ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- JAVA设计模式之策略模式 - Strategy
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 ...
- 大熊君说说JS与设计模式之------策略模式Strategy
一,总体概要 1,笔者浅谈 策略模式,又叫算法簇模式,就是定义了不同的算法,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 策略模式和工厂模式有一定的类似,策略模式相对简单容易理解,并 ...
- 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 设计模式 - 策略模式(Strategy Pattern) 具体解释
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...
- HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern)
策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立 ...
随机推荐
- python 将16进制转化为2进制
>>> x='123abc' >>> b=bin())[:] >>> print(b)
- python 二叉排序树
class BSTNode: def __init__(self, data, left=None, right=None): self.data = data self.left = left se ...
- unity中实现静态的3D对象对其他对象的跟随
using UnityEngine; public class FollowPosition : MonoBehaviour { public Transform targetTrans; publi ...
- C#中类的序列化和反序列化
说明:本文演示将类序列化后写入记事本并从记事本读取反序列化为对象1.首先创建一个类,同时类必须标识为Serializable,如下: [Serializable] public class Regio ...
- SpringMVC是如何逐步简化Servlet的编程的
转自:https://www.cnblogs.com/winterfells/p/8476759.html Servlet和JSP是开发java Web应用程序的两种基本技术,Spring MVC是S ...
- SVN同步版本库与网站目录2
定义: SVN版本库 = /home/svn/repos 网站目录 = /var/www/web 1.检出一个项目到网站目录 #svn checkout file:///home/svn/ ...
- [Java学习] Java虚拟机(JVM)以及跨平台原理
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...
- php--------ThinkPHP3.2验证码使用
Thinkphp框架验证码的路径目录:ThinkPHP -> Library -> Think -> Verify.class.php ,只要在控制器中实例化这个类就能实现验证码的功 ...
- android--------Popupwindow的使用
PopupWindow在Android.widget包下,项目中经常会使用到PopupWindow做菜单选项, PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容, ...
- python-day47--pymysql模块
一.安装导入 #安装 pip3 install pymysql 二.使用 1 .基本使用 import pymysql # 链接,拿到游标 conn=pymysql.connect(host='loc ...