zoukankan      html  css  js  c++  java
  • 设计模式第三次作业

    设计模式第三次作业

    GitHub地址:https://github.com/zlxzlxzlx/DP3

    • 要求:某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(向前和向后)遍历。使用Iterator模式来设计。

    类图:

    关键类java源码及注释:

    public interface abstructIterator {
    	    public void next();  
    	    public boolean isLast();  
    	    public void previous();  
    	    public boolean isFirst();  
    	    public String getNext();  
    	    public String getPrevious();  
    
    }
    
    
    public interface abstructProduct {
       abstructIterator createIterator();
    }
    
    
    public class Product implements abstructProduct{
    	private  Object[] obj={"苹果","梨","橙子","香蕉"};
    
    	@Override
    	public abstructIterator createIterator() {
    		return new MyIterator();
    	}
    	private class MyIterator implements abstructIterator{
    		 private int index1;  
    		 private int index2; 
    		 
    		 public MyIterator() {  
    		        index1 = 0;  
    		        index2 = obj.length - 1;  
    		    }  
    		 
    		@Override
    		public void next() {
    			  if(index1<obj.length){  
    		            index1++;  
    		        }  
    			
    		}
    
    		@Override
    		public boolean isLast() {
    		 return (index1 == obj.length);
    		}
    
    		@Override
    		public void previous() {
    			 if (index2>-1) {  
    		            index2--;  
    		        }
    		}
    
    		@Override
    		public boolean isFirst() {
    			  return index2==-1;
    		}
    
    		@Override
    		public String getNext() {
    			return (String) obj[index1];
    		}
    
    		@Override
    		public String getPrevious() {
    			return  (String) obj[index2];
    		}	
    	}
    
    	
    }
    
    
    public class client {
    
    	public static void main(String[] args) {
    	abstructIterator iterator;
    	abstructProduct product =new Product();
    	iterator=product.createIterator();
    	while (!iterator.isLast()) {  
            System.out.print(iterator.getNext());  
            System.out.print(" "); 
            iterator.next();  
           }  
    	System.out.println();
    	 while (!iterator.isFirst()) {  
             System.out.print(iterator.getPrevious());  
             System.out.print(" "); 
             iterator.previous();  
         }  
    	}
    
    }
    
    

    输出结果:

    苹果 梨 橙子 香蕉 
    香蕉 橙子 梨 苹果
    
    
    • 要求:某公司欲开发一个基于Windows平台的公告板系统,系统提供主菜单(Menu)其中有菜单项(MenuItem)。通过Menu类的addMenuItem()方法增加菜单项。菜单项的打开方法是click(),每个菜单项包含一个抽象命令类,具体命令类包括OpenCommand()、CreateCommand()、EditCommand()等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen())的open()、create()、edit())等方法。使用Command模式来设计。

    类图:

    关键类java源码及注释:

    public interface abstructCommand {
    	public void execute();
    }
    
    
    public class CreateCommand implements abstructCommand{
    
    	private  BoardScreen bs;
           public CreateCommand( BoardScreen bs){
    		this.bs=bs;
    	}
    	@Override
    	public void execute() {
    		bs.create();
    	}
    }
    
    
    public class EditCommand implements abstructCommand{
    	private  BoardScreen bs;
    	public EditCommand ( BoardScreen bs){
    		this.bs=bs;
    	}
    	@Override
    	public void execute() {
    		bs.edit();
    	}
    }
    
    
    public class OpenCommand implements abstructCommand{
    
    	private  BoardScreen bs;
    	public OpenCommand ( BoardScreen bs){
    		this.bs=bs;
    	}
    	@Override
    	public void execute() {
    		bs.open();
    	}
    
    }
    
    
    public class MenuItem {
         private abstructCommand command;
         public MenuItem(abstructCommand command){
        	this.command=command; 
         }
         public void click(){
        	 this.command.execute();
         }
    }
    
    
    import java.util.ArrayList;
    
    public class Menu {
    	private ArrayList<MenuItem> menuItemsList = new ArrayList<MenuItem>();
    	public void addMenuItem(MenuItem item){
    		this.menuItemsList.add(item);
    	}
    	
    	 public void clickMenuItem(int index) {
    		 menuItemsList.get(index).click();
    	    }
    }
    
    
    public class BoardScreen {
         public void open(){
        	System.out.println("open被调用"); 
         }
         public void create(){
         	System.out.println("create被调用"); 
          }
         public void edit(){
         	System.out.println("edit被调用"); 
          }
    }
    
    
    public class client {
    
    	public static void main(String[] args) {
             Menu menu=new Menu();
             BoardScreen bs = new BoardScreen();
    	 abstructCommand  oc=new OpenCommand(bs );
    	 MenuItem item1=new MenuItem(oc);
    	 menu.addMenuItem(item1);
    	 abstructCommand  cc=new CreateCommand(bs );
             MenuItem item2=new MenuItem(cc);
    	 menu.addMenuItem(item2);
     	 abstructCommand  ec=new EditCommand(bs );
             MenuItem item3=new MenuItem(ec);
    	 menu.addMenuItem(item3);
          
    	 menu.clickMenuItem(0);
    	 menu.clickMenuItem(1);
    	 menu.clickMenuItem(2);
    	}
    }
    
    

    输出结果:

    open被调用
    create被调用
    edit被调用
    
    
    • 要求:某论坛系统欲增加一个虚拟聊天室,允许论坛会员通过该聊天室进行信息交流,普通会员(CommonMember)可以给其他会员发送文本信息,钻石会员(DiamondMember)可以给其他会员发送文本和图片信息。该聊天室可以对不雅字符进行过滤,如“TMD”等字符,还可以对发送图片大小进行控制。使用Mediator模式来设计。

    类图:

    关键类java源码及注释:

    public abstract class abstructChatRoom {
    	public abstract  void addRoom(Member member);
      public abstract  void sendText(String form,String to,String text);
      public abstract void sendImage(String form,String to,String image);
    }
    
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class ChatRoom extends abstructChatRoom{
    
    	Map<String, Member> map=new HashMap<String,Member>();
    	@Override
    	public void addRoom(Member member) {
    		map.put(member.getName(), member);
    		member.setAbstructChatRoom(this);
    	}
    	
    	@Override
    	public void sendText(String from, String to, String text) {
              Member memberToText=map.get(to);
              memberToText.reciveText(from, text);
    	}
    
    	@Override
    	public void sendImage(String from, String to, String image) {
    		 Member memberToImage=map.get(to);
    		 memberToImage.reciveImage(from, image);
    	}
    }
    
    
    public abstract class Member {
    
    	protected String name;
    	protected abstructChatRoom abstructChatRoom;
       public Member(String name) {
    		this.name=name;
    	}
       public String getName() {
    		return name;
    	}
      
    	public abstructChatRoom getAbstructChatRoom() {
    		return abstructChatRoom;
    	}
    	public void setAbstructChatRoom(abstructChatRoom abstructChatRoom) {
    		this.abstructChatRoom = abstructChatRoom;
    	}
    	public abstract void sendText(String to,String Text);
        public abstract void sendImage(String to,String Image);
        public void reciveText(String from,String Text){
           System.out.println(this.name+"接收来自"+from+"的文本:"+Text);
           }
        public void reciveImage(String from,String Image){
        	System.out.println(this.name+"接收来自"+from+"的图片:"+Image);
           }
    
    }
    
    public class DiamondMember extends Member{
    	
    	public DiamondMember(String name){
    		super(name);
    	}
    	@Override
    	public void sendText(String to, String Text) {
    		System.out.println(this.name+"向"+to+"发送的文本:"+Text);
    		super.abstructChatRoom.sendText(this.name, to, Text);
    	}
    
    	@Override
    	public void sendImage(String to, String Image) {
    		System.out.println(this.name+"向"+to+"发送的图片:"+Image);
    		super.abstructChatRoom.sendImage(this.name, to, Image);
    	}
    
    }
    
    
    public class CommonMember extends Member {
    	
    	public CommonMember(String name){
    		super(name);
    	}
    
    	@Override
    	public void sendText(String to, String Text) {
    		System.out.println(this.name+"向"+to+"发送的文本:"+Text);
    		super.abstructChatRoom.sendText(this.name, to, Text);
    	}
    
    	@Override
    	public void sendImage(String to, String Image) {
    	     System.out.println("对不起您没有发送图片的权限");
    	}
    
    }
    
    
    public class client {
    
    	public static void main(String[] args) {
    		abstructChatRoom chatRoom=new ChatRoom();
    		Member member1=new CommonMember("zlx");
    		chatRoom.addRoom(member1);
    		
    		Member member2=new DiamondMember("lj");
    		chatRoom.addRoom(member2);
    		
    		Member member3=new CommonMember("tf");
    		chatRoom.addRoom(member3);
    		
    		member1.sendText("lj", "hello");
    		member1.sendImage("ft", "image");
    		
    		member2.sendText("zlx", "fine");
    		
    		member3.sendText("zlx", "thank");
    		member3.sendImage("lj", "image");
    			
    
    	}
    
    }
    
    

    输出结果:

    zlx向lj发送的文本:hello
    lj接收来自zlx的文本:hello
    对不起您没有发送图片的权限
    lj向zlx发送的文本:fine
    zlx接收来自lj的文本:fine
    tf向zlx发送的文本:thank
    zlx接收来自tf的文本:thank
    对不起您没有发送图片的权限
    
    
    • 要求:设计一个网上书店,对系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,语言类图书(LanguageBook)每本都有2元的折扣,小说类图书(NovelBook)每100元有15元的折扣。使用Strategy模式来设计。

    类图:

    关键类java源码及注释:

    public interface BookStrategy {
    	 double calcPrice(double bookPrice); 
    }
    
    
    public class ComputerBook implements BookStrategy{
    
    
    	@Override
    	public double calcPrice(double bookPrice) {
    		 System.out.println("ComputerBook 10% discount. "); 
    			return bookPrice*0.9;
    	}
    
    }
    
    
    public class LanguageBook implements BookStrategy{
    	
    
    	@Override
    	public double calcPrice(double bookPrice) {
    		 System.out.println("LanguageBook-2.0 discount."); 
    		return bookPrice-2.0;
    	}
    
    }
    
    
    public class NovelBook implements BookStrategy{
    
    	@Override
    	public double calcPrice(double bookPrice) {
    		  System.out.println("NovelBook100.00-15.00");         
    		  int bp = (int)bookPrice;          
    		  return bookPrice - (double)(bp / 100 * 15);
    	}
    
    }
    
    
    public class Price {
         private BookStrategy strategy;
         public void setStrategy(BookStrategy strategy){
        	 this.strategy=strategy;
         }
    	public double calcPrice(double bookPrice){
        	 return this.strategy.calcPrice(bookPrice);
         }
    
    }
    
    
    public class client {
    
    	public static void main(String[] args) {
    		
    		Price price1=new Price();
    		BookStrategy strategy1=new ComputerBook();
    		price1.setStrategy(strategy1);
    		double p1=123;
    		System.out.println("计算机类图书原价"+p1+"计算机类图书折扣后:"+price1.calcPrice(p1));
    		
    		Price price2=new Price();
    		BookStrategy strategy2=new LanguageBook();
    		price2.setStrategy(strategy2);
    		double p2=456;
    		System.out.println("语言类图书原价"+p2+"语言类图书折扣后:"+price2.calcPrice(p2));
    		
    		Price price3=new Price();
    		BookStrategy strategy3=new NovelBook();
    		price3.setStrategy(strategy3);
    		double p3=789;
    		System.out.println("小说类图书"+p3+"小说类图书折扣后:"+price3.calcPrice(p3));
    		
    	}
    
    }
    
    

    输出结果:

    ComputerBook 10% discount. 
    计算机类图书原价123.0计算机类图书折扣后:110.7
    LanguageBook-2.0 discount.
    语言类图书原价456.0语言类图书折扣后:454.0
    NovelBook100.00-15.00
    小说类图书789.0小说类图书折扣后:684.0
    
    
  • 相关阅读:
    架构 框架 设计模式 --备用
    机器视觉项目开发之---织物疵点检测机器视觉系统 软件测试平台
    多媒体开发之--- live555 vs2010/vs2013下编译,使用,测试
    多媒体开发之--- h264 图像、帧、片、NALU
    多媒体开发之---H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流
    多媒体开发之---h264格式slice_header
    图像处理之基础---傅立叶c实现
    图像处理之基础---小波提取特征
    图像处理之基础---图像的特征简介
    嵌入式开发之工具---log file
  • 原文地址:https://www.cnblogs.com/zlxbky/p/7890134.html
Copyright © 2011-2022 走看看