题海
让大学四年没有难题
首页
搜题
登陆
题目详情
判断题
策略模式的环境类中可以包含多个不同抽象策略类的引用
A.
正确
B.
错误
查看答案
学科:
软件体系结构与设计模式
时间:
2024-06-05 01:38:20
相关题目
相关作业
题目1
单选题
以下关于策略模式叙述错误的是( )
A. 策略模式是对算法的包装,是把算法的责任和算法本身分隔开,委派给不同的对象管理
B. 在Context类中,维护了对各个ConcreteStrategy的引用实例,提供了一个接口供ConcreteStrategy存储数据
C. 策略模式让算法独立于使用它的客户而变化
D. 策略模式中,定义一系列算法,并将每一个算法封装起来,并让它们可以相互替换
题目2
单选题
以下关于策略模式的优缺点描述错误的是( )
A. 策略模式中,客户端无须知道所有的策略类,系统必须自行提供一个策略类
B. 策略模式可以避免使用多重条件转移语句
C. 策略模式会导致产生大量的策略类
D. 策略模式提供了管理相关算法族的办法
题目3
单选题
场景( )不是状态模式的实例
A. 银行账户根据余额不同拥有不同的存取款操作
B. 游戏软件中根据虚拟角色级别的不同拥有不同的权限
C. 某软件在不同的操作系统中呈现不同的外观
D. 会员系统中会员等级不同可以实现不同的行为
题目4
单选题
以下关于状态模式叙述错误的是( )
A. 状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类
B. 状态模式中引入了一个抽象类来专门表示对象的状态,而具体的状态都继承了该类,并实现了不同状态的行为,包括各种状态之间的转换
C. 状态模式使得状态的变化更加清晰明了,也很容易创建对象的新状态
D. 状态模式完全符合开闭原则,增加新的状态类无须对原有类库进行任何修改
题目5
填空题
某软件公司要为一银行开发一套信用卡业务系统,银行账户(Account)是该系统的核心类之一,通过分析,该 软件公司开发人员发现在系统中账户存在3种状态,且在不同状态下账户存在不同的行为,具体说明如下: (1) 如果账户中余额大于等于0,则账户的状态为正常状态(Normal State),此时用户既可以向该账户存款也可以从该账户取款; (2) 如果账户中余额小于0,并且大于-2000,则账户的状态为透支状态(Overdraft State),此时用户既可以向该账户存款也可以从该账户取款,但需要按天计算利息; (3) 如果账户中余额等于-2000,那么账户的状态为受限状态(Restricted State),此时用户只能向该账户存款,不能再从中取款,同时也将按天计算利息; (4) 根据余额的不同,以上3种状态可发生相互转换. 现使用状态模式设计并实现银行账户状态的转换.银行账户状态图如图1所示,类图如图2所示. <img src="https://tihai-oss-cloud.itihey.com/img/521abf0ebabdd3ecc5a2a7401e56e91e.png"> 图1 银行账户状态图 <img src="https://tihai-oss-cloud.itihey.com/img/add3273abbfee1f0a3ff00d266b03beb.png"> 图2 类图 【Java代码】 //银行账户:环境类 public class Account { private (1) state; //维持一个对抽象状态对象的引用 private String owner; //开户名 private double balance = 0; //账户余额 public Account(String owner,double init) { this.owner = owner; this.balance = balance; this.state = new NormalState(this); //设置初始状态 System.out.println(this.owner + "开户,初始金额为" + init); System.out.println("---------------------------------------------"); } public double getBalance() { return this.balance; } public void setBalance(double balance) { this.balance = balance; } public void setState(AccountState state) { this.state = state; } //存款 public void deposit(double amount) { System.out.println(this.owner + "存款" + amount); state.deposit(amount); //调用状态对象的deposit()方法 System.out.println("现在余额为"+ this.balance); System.out.println("现在帐户状态为"+ this.state.getClass().getName()); System.out.println("---------------------------------------------"); } //取款 public void withdraw(double amount) { System.out.println(this.owner + "取款" + amount); state.withdraw(amount); //调用状态对象的withdraw()方法 System.out.println("现在余额为"+ this.balance); System.out.println("现在帐户状态为"+ this. state.getClass().getName()); System.out.println("---------------------------------------------"); } //计息 public void computeInterest() { state.computeInterest(); //调用状态对象的computeInterest()方法 } } //抽象状态类 public abstract class AccountState { protected (2) acc; public abstract void deposit(double amount); public abstract void withdraw(double amount); public abstract void computeInterest(); public abstract void stateCheck(); } //正常状态:具体状态类 public class NormalState extends AccountState { public NormalState(Account acc) { (3) ; } public NormalState(AccountState state) { this.acc = state.acc; } public void deposit(double amount) { acc.setBalance(acc.getBalance() + amount); stateCheck(); } public void withdraw(double amount) { acc.setBalance(acc.getBalance() - amount); (4) ; } public void computeInterest() { System.out.println("正常状态,无须支付利息!"); } //状态转换 public void stateCheck() { if (acc.getBalance() > -2000 && acc.getBalance() <= 0) { (5) ; } else if (acc.getBalance() == -2000) { acc.setState(new RestrictedState(this)); } else if (acc.getBalance() < -2000) { System.out.println("操作受限!"); } } } //透支状态:具体状态类 public class OverdraftState extends AccountState { public OverdraftState(AccountState state) { this.acc = state.acc; } public void deposit(double amount) { acc.setBalance(acc.getBalance() + amount); stateCheck(); } public void withdraw(double amount) { acc.setBalance(acc.getBalance() - amount); stateCheck(); } public void computeInterest() { System.out.println("计算利息!"); } //状态转换 public void stateCheck() { if (acc.getBalance() > 0) { acc.setState(new NormalStateState(this)) ; } else if (acc.getBalance() == -2000) { (6) ; } else if (acc.getBalance() < -2000) { System.out.println("操作受限!"); } } } //受限状态:具体状态类 public class RestrictedState extends AccountState { public RestrictedState(AccountState state) { (7) ; } public void deposit(double amount) { acc.setBalance(acc.getBalance() + amount); stateCheck(); } public void withdraw(double amount) { System.out.println("帐号受限,取款失败"); } public void computeInterest() { System.out.println("计算利息!"); } //状态转换 public void stateCheck() { if(acc.getBalance() > 0) { (8) ; } else if(acc.getBalance() > -2000) { acc.setState(new OverdraftState(this)) ; } } } //客户类 public class Client { public static void main(String args[]) { Account acc = new Account("段誉",0.0); acc.deposit(1000); acc.withdraw(2000); acc.deposit(3000); acc.withdraw(4000); acc.withdraw(1000); acc.computeInterest(); } }
题目6
判断题
策略模式的环境类中可以包含多个不同抽象策略类的引用
A. 正确
B. 错误
题目7
简答题
某软件公司现欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征.需要模拟的飞机种类及其特征如表1所示. <img src="https://tihai-oss-cloud.itihey.com/img/b664ae83f2337e86a423a0508267b96e.png"> 为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计. 1、使用Java语言编程实现(15分) 2、根据代码画出UML类图.(15分) 3、说明该题使用策略模式的优点 .
下载
题海APP
拍照搜题更快捷
海量题库
无搜索限制
快捷拍照搜题
扫描他!然后带走我~