1、要求:某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(向前和向后)遍历。使用Iterator模式来设计
public interface Iterator {
public abstract boolean next();
public abstract boolean previous();
}
public class MyIterator implements Iterator {
private MyGoodsStore mygoodsstore;
private int index;
public MyIterator(MyGoodsStore mygoodsstore)
{
this.mygoodsstore = mygoodsstore;
this.index = 0;
}
@Override
public boolean next()
{
}
@Override
public boolean previous()
{
}
}
public interface GoodsStore {
public abstract Iterator iterator();
}
public class MyGoodsStore implements GoodsStore {
private Goods[] goods;
public MyGoods(int maxSize) {
this.goods = new Goods[maxSize];
}
@Override
public Iterator iterator() {
return new MyIterator(this);
}
}
2、要求:某公司欲开发一个基于Windows平台的公告板系统,系统提供主菜单(Menu)其中有菜单项(MenuItem)。通过Menu类的addMenuItem()方法增加菜单项。菜单项的打开方法是click(),每个菜单项包含一个抽象命令类,具体命令类包括OpenCommand()、CreateCommand()、EditCommand()等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen())的open()、create()、edit())等方法。使用Command模式来设计。
public class Menu
{
private List<MenuItem> myMenuItemList = new ArrayList<>();
public void addMenuItem(MenuItem menuItem)
{
}
public void clickMenuItem(int index)
{
menuItemList.get(index).click();
}
}
public class MenuItem
{
private Command command;
public MenuItem(Command command)
{
this.command = command;
}
public void setCommand(Command command)
{
this.command = command;
}
public void click()
{
command.execute();
}
}
public abstract class Command
{
public abstract void execute();
}
public class BoardScreen
{
public bool open()
{
}
public bool create()
{
}
public bool edit()
{
}
}
public class OpenCommand extends Command
{
private BoardScreen boardScreen;
public OpenCommand(BoardScreen boardScreen)
{
this.boardScreen = boardScreen;
}
@Override
public void execute()
{
boardScreen.open();
}
}
public class CreateCommand extends Command
{
private BoardScreen boardScreen;
public CreateCommand(BoardScreen boardScreen)
{
this.boardScreen = boardScreen;
}
@Override
public void execute()
{
boardScreen.create();
}
}
public class EditCommand extends Command
{
private BoardScreen boardScreen;
public EditCommand(BoardScreen boardScreen)
{
this.boardScreen = boardScreen;
}
@Override
public void execute() {
boardScreen.edit();
}
}
public abstract class Member
{
private String member_name;
private ChatRoom chat_room;
public Member(String member_name)
{
this.member_name = member_name;
}
public void setRoom(ChatRoom chat_room)
{
this.chat_room = chat_room;
}
public String getMemberName()
{
return member_name;
}
public boolean sendText(Member receiver, String text)
{
}
public boolean sendImage(Member receiver, String image)
{
}
}
public class CommonMember extends Member
{
public CommonMember(String member_name)
{
super(member_name);
}
public boolean sendImage(Member receiver, String image)
{
}
}
public class DiamondMember extends Member
{
public DiamondMember(String member_name)
{
super(member_name);
}
}
public class ChatRoom
{
public boolean register(Member member)
{
member.setRoom(this);
}
public boolean sendText(Member sender, Member receiver, String text)
{
}
public boolean sendImage(Member sender, Member receiver, String image)
{
}
}
public class ConcreteChatRoom extends ChatRoom
{
protected String textFilter(String text)
{
}
protected boolean imageCheck(String image)
{
}
public boolean sendText(Member sender, Member receiver, String text)
{
super.sendText(sender, receiver, textFilter(text));
}
public boolean sendImage(Member sender, Member receiver, String image)
{
if(imageCheck(image))
{
super.sendImage(sender, receiver, image);
}
}
}
4、要求:设计一个网上书店,对系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,语言类图书(LanguageBook)每本都有2元的折扣,小说类图书(NovelBook)每100元有15元的折扣。使用Strategy模式来设计。
public abstract class Discount
{
public double discount(double price);
}
public class ComputerBookDct extends Discount
{
public double discount(double price)
{
return 0.9*price;
}
}
public class LanguageBookDct extends Discount
{
public double discount(double price)
{
if(price > 2)
return price-2;
else return price;
}
}
public class NovelBookDct extends Discount
{
public double discount(double price)
{
if(price >= 100)
return price-((int)price/100)*15;
else
return price;
}
}
public class BookShop
{
private ComputerBookDct computer_book_dct;
private LanguageBookDct language_book_dct;
private NovelBookDct novel_book_dct;
public void setComputerBookDct(ComputerBookDct computer_book_dct)
{
this.computer_book_dct = computer_book_dct;
}
public void setLanguageBookDct(LanguageBookDct language_book_dct)
{
this.language_book_dct = language_book_dct;
}
public void setNovelBookDct(NovelBookDct novel_book_dct)
{
this.novel_book_dct = novel_book_dct;
}
public void showBookPrice(Book book)
{
double book_price = book.getPrice();
if(book instanceof ComputerBook)
{
book_price = computer_book_dct.discount(book_price);
}
else if(book instanceof LanguageBook)
{
book_price = language_book_dct.discount(book_price);
}
else if(book instanceof NovelBook)
{
book_price = novel_book_dct.discount(book_price);
}
System.out.println(book.getClass().getSimpleName()+" 原价格:"+book.getPrice()+" 现价格:"+book_price );
}
}
public abstract class Book
{
private double book_price;
public double getBookPrice()
{
return book_price;
}
public void setBookPrice(double book_price)
{
this.book_price = book_price;
}
}
public class ComputerBook extends Book
{
}
public class LanguageBook extends Book
{
}
public class NovelBook extends Book
{
}