디자인 모드 3 차 작업
github 주소
1. 요구: 특정한 상품 관리 시스템 의 상품 이름 은 문자열 배열 에 저장 되 어 있 습 니 다. 현재 양 방향 교체 기 (MyIterator) 를 사용자 정의 하여 이 상품 이름 배열 의 양 방향 (앞 과 뒤로) 을 옮 겨 다 녀 야 합 니 다.Iterator 모드 로 디자인 되 었 습 니 다.
github 주소
아 날로 그:
원본 코드:
public interface MyIterator {
boolean prev();
boolean next();
String curItem();
}
public interface ProductList {
MyIterator getIterator();
}
public class MyProductList implements ProductList{
private String[] products;
public MyProductList(String[] products) {
this.products = products;
}
@Override
public MyIterator getIterator() {
return new MyProductListIterator();
}
private class MyProductListIterator implements MyIterator{
private int curIndex = 0;
@Override
public boolean prev() {
boolean hasPrev = curIndex > 0;
if(hasPrev){
--curIndex;
}
return hasPrev;
}
@Override
public boolean next() {
boolean hasNext = curIndex < products.length -1;
if(hasNext){
++curIndex;
}
return hasNext;
}
@Override
public String curItem() {
return products[curIndex];
}
}
}
2. 한 회 사 는 윈도 플랫폼 을 기반 으로 하 는 게시판 시스템 을 개발 하고 자 합 니 다. 시스템 은 메 인 메뉴 (Menu) 에 메뉴 항목 (Menu Item) 이 있 습 니 다.메뉴 클래스 의 addMenu Item () 방법 으로 메뉴 항목 을 추가 합 니 다.메뉴 항목 을 여 는 방법 은 click () 입 니 다. 메뉴 항목 마다 추상 적 인 명령 클래스 가 포함 되 어 있 습 니 다. 구체 적 인 명령 클래스 는 OpenCommand (), Create Command (), EditCommand () 등 을 포함 하고 명령 클래스 는 하나의 execute () 방법 을 가지 고 있 으 며 게시판 시스템 인터페이스 클래스 (BoardScreen () 의 open (), create (), edit () 등 을 호출 하 는 데 사 용 됩 니 다. Command 모드 를 사용 하여 설계 합 니 다.
github 주소
아 날로 그:
원본 코드:
public class BoardScreen {
private Menu menu;
public BoardScreen(Menu menu) {
this.menu = menu;
}
public Menu getMenu() {
return menu;
}
public void open(){
System.out.println("BoardScreen open");
}
public void create(){
System.out.println("BoardScreen create");
}
public void edit(){
System.out.println("BoardScreen edit");
}
}
public class Menu {
private List
public class MenuItem {
private String name;
private Command command;
public MenuItem(String name, Command command){
this.name = name;
this.command = command;
}
public void click(){
System.out.print("click the menuItem["+name+"]"+" and ");
command.execute();
}
}
public interface Command {
void execute();
}
public class OpenCommand implements Command {
private BoardScreen boardScreen;
public OpenCommand(BoardScreen boardScreen) {
this.boardScreen = boardScreen;
}
@Override
public void execute() {
boardScreen.open();
}
}
public class EditCommand implements Command {
private BoardScreen boardScreen;
public EditCommand(BoardScreen boardScreen) {
this.boardScreen = boardScreen;
}
@Override
public void execute() {
boardScreen.edit();
}
}
public class CreateCommand implements Command {
private BoardScreen boardScreen;
public CreateCommand(BoardScreen boardScreen) {
this.boardScreen = boardScreen;
}
@Override
public void execute() {
boardScreen.create();
}
}
public class BoardScreenTest {
private BoardScreen boardScreen;
@Before
public void init(){
boardScreen = new BoardScreen(new Menu());
boardScreen.getMenu().addMenuItem(new MenuItem("openMenuItem", new OpenCommand(boardScreen)));
boardScreen.getMenu().addMenuItem(new MenuItem("createMenuItem", new CreateCommand(boardScreen)));
boardScreen.getMenu().addMenuItem(new MenuItem("editMenuItem", new EditCommand(boardScreen)));
}
@Test
public void test(){
boardScreen.getMenu().clickAllItems();
}
}
3. 모 커 뮤 니 티 시스템 은 가상 채 팅 방 을 추가 하여 커 뮤 니 티 회원 이 해당 채 팅 방 을 통 해 정보 교 류 를 할 수 있 도록 하고 일반 회원 (CommonMember) 은 다른 회원 에 게 텍스트 메 시 지 를 보 낼 수 있 으 며 다이아몬드 회원 (Diamond Member) 은 다른 회원 에 게 텍스트 와 이미지 메 시 지 를 보 낼 수 있 습 니 다. 이 채 팅 방 은 'TMD' 와 같은 고상 하지 않 은 문 자 를 걸 러 낼 수 있 습 니 다.등 문 자 는 보 내 는 그림 의 크기 를 조절 할 수 있 습 니 다. Mediator 모드 로 디자인 할 수 있 습 니 다.
github 주소
아 날로 그:
원본 코드:
public abstract class Member {
private String name;
private AbstractChatRoom chatRoom;
public Member(String name) {
this.name = name;
}
public void setChatRoom(AbstractChatRoom chatRoom) {
this.chatRoom = chatRoom;
}
public String getName() {
return name;
}
public void sendText(Member to, String text){
chatRoom.sendText(this, to, text);
}
public void sendImage(Member to, String image){
chatRoom.sendImage(this, to, image);
}
}
public class CommonMember extends Member{
public CommonMember(String name) {
super(name);
}
@Override
public void sendImage(Member to, String image) {
System.out.println("you need to upgrade to diamond member");
}
}
public class DiamondMember extends Member {
public DiamondMember(String name) {
super(name);
}
}
public class AbstractChatRoom {
public void register(Member member){
member.setChatRoom(this);
}
public void sendText(Member from, Member to, String text){
System.out.println(from.getName() +" to " + to.getName() +" : text("+text+")");
}
public void sendImage(Member from, Member to, String image){
System.out.println(from.getName() +" to " + to.getName() +" : image("+image+")");
}
}
public class ChatRoom extends AbstractChatRoom{
@Override
public void sendText(Member from, Member to, String text) {
super.sendText(from, to, filterText(text));
}
@Override
public void sendImage(Member from, Member to, String image) {
if(imageCheck(image)){
super.sendImage(from, to, image);
}
}
protected String filterText(String text){
return text.replace("TMD", "***");
}
protected boolean imageCheck(String image){
return image.length() < 4;
}
}
public class ChatRoomTest {
private Member a;
private Member b;
@Before
public void inti(){
a = new CommonMember("commonMember");
b = new DiamondMember("diamondMember");
AbstractChatRoom chatRoom = new ChatRoom();
chatRoom.register(a);
chatRoom.register(b);
}
@Test
public void test(){
a.sendText(b, "TMD! b");
a.sendImage(b, "i1");
b.sendText(a, "TMD! a");
b.sendImage(a, "i1sdfasdf");
b.sendImage(a, "i1");
}
}
4. 요구 사항: 인터넷 서점 을 설계 하여 시스템 에 있 는 모든 컴퓨터 도서 (Computer Book) 를 한 권 에 10% 할인 하고 언어 도서 (LanguageBook) 는 한 권 에 2 위안 할인 하 며 소설 도서 (NovelBook) 는 100 위안 에 15 위안 할인 합 니 다. Strategy 모델 로 디자인 합 니 다.
github 주소
아 날로 그:
원본 코드:
public interface DiscountStrategy {
public double discount(double price);
}
public class ComputerBookDiscount implements DiscountStrategy{
@Override
public double discount(double price) {
return 0.9*price;
}
}
public class LanguageBookDiscount implements DiscountStrategy{
@Override
public double discount(double price) {
return price-2;
}
}
public class NovelBookDiscount implements DiscountStrategy{
@Override
public double discount(double price) {
return price-price/100*15;
}
}
public class BookShop {
private ComputerBookDiscount computerBookDiscount;
private LanguageBookDiscount languageBookDiscount;
private NovelBookDiscount novelBookDiscount;
public void setComputerBookDiscount(ComputerBookDiscount computerBookDiscount) {
this.computerBookDiscount = computerBookDiscount;
}
public void setLanguageBookDiscount(LanguageBookDiscount languageBookDiscount) {
this.languageBookDiscount = languageBookDiscount;
}
public void setNovelBookDiscount(NovelBookDiscount novelBookDiscount) {
this.novelBookDiscount = novelBookDiscount;
}
public double showPrice(Book book){
double price = book.getPrice();
if(book instanceof ComputerBook){
price = computerBookDiscount.discount(price);
}else if(book instanceof LanguageBook){
price = languageBookDiscount.discount(price);
}else if(book instanceof NovelBook){
price = novelBookDiscount.discount(price);
}
System.out.println(book.getClass().getSimpleName()+" orig:"+book.getPrice()+" now:"+price );
return price;
}
}
public class Book {
private double price;
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
public class ComputerBook extends Book {
}
public class LanguageBook extends Book {
}
public class NovelBook extends Book {
}
public class BookShopTest {
private BookShop bookShop;
@Before
public void init(){
bookShop = new BookShop();
bookShop.setComputerBookDiscount(new ComputerBookDiscount());
bookShop.setLanguageBookDiscount(new LanguageBookDiscount());
bookShop.setNovelBookDiscount(new NovelBookDiscount());
}
@Test
public void test(){
Book computerBook = new ComputerBook();
computerBook.setPrice(200);
Book languageBook = new LanguageBook();
languageBook.setPrice(200);
Book novelBook = new NovelBook();
novelBook.setPrice(200);
bookShop.showPrice(computerBook);
bookShop.showPrice(languageBook);
bookShop.showPrice(novelBook);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.