您的位置:首页 > 其它

设计模式第三次作业

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: