设计模式第三次作业
2017-11-29 12:48
267 查看
1、要求:某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(向前和向后)遍历。使用Iterator模式来设计。
类图关键类代码如下
public interface AbstractIterator { //抽象迭代器接口 public void next(); public void previous(); public boolean checkFirst(); public boolean checkLast(); public String getNext(); public String getPrevious(); } class Iterator implements AbstractIterator{ private String[] productName; private int index1; private int index2; public Iterator(AbstractList list) { //迭代器初始化 productName = list.getProduct(); index1 = 0; index2 = productName.length - 1; } public void next() { // 迭代器头索引 if(index1<productName.length){ index1++; } } public boolean checkLast() { // 检查index1是否索引到列表最后 return (index1 == productName.length); } public void previous() { // 尾索引 if (index2>-1) { index2--; } else { } } public boolean checkFirst() { // 检查index2是否到了头 return index2==-1; } public String getNext() { // 返回下一个产品名 return productName[index1]; } public String getPrevious() { // 返回前一个产品名 return productName[index2]; } } abstract class AbstractList { //抽象产品表 private String[] productName; public AbstractList(String[] productName) { this.productName = productName; } public String[] getProduct(){ return this.productName; } public abstract AbstractIterator getIterator(); } class List extends AbstractList{ public List(String[] productName) { // 调用父类构造函数初始化 super(productName); } public AbstractIterator getIterator() { // 返回迭代器 return new Iterator(this); } }
2、要求:某公司欲开发一个基于Windows平台的公告板系统,系统提供主菜单(Menu)其中有菜单项(MenuItem)。通过Menu类的addMenuItem()方法增加菜单项。菜单项的打开方法是click(),每个菜单项包含一个抽象命令类,具体命令类包括OpenCommand()、CreateCommand()、EditCommand()等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen())的open()、create()、edit())等方法。使用Command模式来设计。
类图关键类代码如下
public class Menu { private ArrayList<MenuItem> menuItemsList = new ArrayList<MenuItem>(); public void addMenuItem(MenuItem item){ this.menuItemsList.add(item); } public MenuItem getMenuItem(String itemName){ //返回菜单项 } } } public class MenuItem { private Command command; private String itemName; //初始化功能和菜单项名 public setCommand(Command command) { this.command = command; } public setItemName(String name) { this.itemName = name; } public Command getCommand() { return command; } public String getItemName() { return itemName; } public void click(){ //点击动作 this.command.excute(); } } public class BoardScreen { public void open() { } public void create() { } public void edit() { } } public interface Command { public void excute(); } public class CreateCommand implements Command { private BoardScreen boardScreen; public void excute() { boardScreen.create(); } } public class OpenCommand implements ICommand { private BoardScreen boardScreen; public void excute() { boardScreen.open(); } } public class EditCommand implements ICommand { private BoardScreen boardScreen; public void excute() { boardScreen.edit(); } }
3、要求:某论坛系统欲增加一个虚拟聊天室,允许论坛会员通过该聊天室进行信息交流,普通会员(CommonMember)可以给其他会员发送文本信息,钻石会员(DiamondMember)可以给其他会员发送文本和图片信息。该聊天室可以对不雅字符进行过滤,如“TMD”等字符,还可以对发送图片大小进行控制。使用Mediator模式来设计。
类图关键代码
public abstract class AbstractChatroom { //抽象聊天室类 public abstract void register(Member member); public abstract void sendText() { //发送文本抽象方法 }; public abstract void sendPicture(); { //发送图片抽象方法 } } public class Chatroom extends AbstractChatroom { public void register(Member member) { //注册方法 } public void sendText() { //发送文本 } public void sendPicture() { //发送图片 } } public abstract class Member { protected AbstractChatroom chatroom; protected String name; public Member(String name) { this.name=name; } public void setName(String name) { this.name=name; } public void setChatroom(String name) { } public void sendText() { } public void sendPicture { } public void receivePicture() { } public String receiveText() { } } public class DiamondMember extends Member { public DiamondMember(String name) { super(name); } public void sendText() { } public void sendPicture { } public void receivePicture() { } public String receiveText() { } } public class CommonMember extends Member { public CommonMember(String name) { super(name); } public void sendText() { } public void sendPicture { //钻石会员才能发送图片 } public void receivePicture() { } public String receiveText() { } }
4、要求:设计一个网上书店,对系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,语言类图书(LanguageBook)每本都有2元的折扣,小说类图书(NovelBook)每100元有15元的折扣。使用Strategy模式来设计。
类图关键代码
public interface Strategy { //抽象策略类 double settle(double price); } public class ComputerBook implements Strategy { //计算机图书计费 public double settle(double price) { //10%折扣 } } public class LanguageBook implements Strategy { //语言类图书计费 public double settle(double price) { //-2元 } } public class NovelBook implements Strategy { //小说类图书计费 public double settle(double price) { //满100,-15 } public class Price { private Strategy strategy; public Price(Strategy strategy) { this.strategy = strategy; } public double settle(double price) { return this.strategy.settle(price); } }
相关文章推荐
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式之Prototype——作业篇
- 设计模式第一次作业
- 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
- 设计模式第一次作业
- 设计模式之Prototype——作业篇
- 设计模式第二次作业
- UML (1) 设计模式及作业附图
- 第三次C程序语言设计作业
- 设计模式第一次作业
- 设计模式:策略模式-让你可以用不同的笔写作业
- 【设计模式】面向对象作业-超级母牛的故事
- 课堂作业06——设计模式综述
- [作业2]C++第三次实验(基础班)——选择结构设计