接口设计的一个程序实例(宠物商店)

外延

以往写博客没有用那种目录的结构,今天终于会用了。如何使用目录结构请参照:目录结构的使用

实例要求

实现一个宠物商店,宠物商店的宠物可以有多种(数量由用户决定),试表示此种关系,并要求根据宠物的的关键字查找宠物的信息,所需要的宠物信息自行设计。

所用知识

接口,对象数组

实例分析

宠物信息可以自行设计,我们可以简单设计三个属性:名字、颜色、年龄

宠物的类别很多、所以宠物应该是一个标准(接口)

宠物商店有多种宠物,应该是一个宠物的对象数组

代码实现

interface Pet{	// 定义宠物接口
	public String getName() ;
	public String getColor() ;
	public int getAge() ;
}
class Cat implements Pet{	// 猫是宠物,实现接口
	private String name ;	// 宠物名字
	private String color ;	// 宠物颜色
	private int age ;		// 宠物年龄
	public Cat(String name,String color,int age){
		this.setName(name) ;
		this.setColor(color) ;
		this.setAge(age) ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setColor(String color){
		this.color = color;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public String getColor(){
		return this.color ;
	}
	public int getAge(){
		return this.age ;
	}
};
class Dog implements Pet{	// 狗是宠物,实现接口
	private String name ;	// 宠物名字
	private String color ;	// 宠物颜色
	private int age ;		// 宠物年龄
	public Dog(String name,String color,int age){
		this.setName(name) ;
		this.setColor(color) ;
		this.setAge(age) ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setColor(String color){
		this.color = color;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public String getColor(){
		return this.color ;
	}
	public int getAge(){
		return this.age ;
	}
};
class PetShop{	// 宠物商店
	private Pet[] pets ;	// 保存一组宠物
	private int foot ;
	public PetShop(int len){
		if(len>0){
			this.pets = new Pet[len] ;	// 开辟数组大小
		}else{
			this.pets = new Pet[1] ;	// 至少开辟一个空间
		}
	}
	public boolean add(Pet pet){	// 增加的是一个宠物
		if(this.foot<this.pets.length){
			this.pets[this.foot] = pet ;	// 增加宠物
			this.foot ++ ;            //foot 数组下标
			return true ;
		}else{
			return false ;
		}
	}
	public Pet[] search(String keyWord){
		// 应该确定有多少个宠物符合要求
		Pet p[] = null ;
		int count = 0 ;	// 记录下会有多少个宠物符合查询结果
		for(int i=0;i<this.pets.length;i++){
			if(this.pets[i]!=null){		// 表示此位置有宠物
				if(this.pets[i].getName().indexOf(keyWord)!=-1
					||this.pets[i].getColor().indexOf(keyWord)!=-1){
					count++ ;	// 修改查找到的记录数
				}
			}
		}
		p = new Pet[count] ;	// 开辟指定的大小空间
		int f = 0 ;	// 增加元素的位置标记
		for(int i=0;i<this.pets.length;i++){
			if(this.pets[i]!=null){		// 表示此位置有宠物
				if(this.pets[i].getName().indexOf(keyWord)!=-1
					||this.pets[i].getColor().indexOf(keyWord)!=-1){
					p[f] = this.pets[i] ;
					f++ ;
				}
			}
		}
		return p ;

	}
};
public class PetShopDemo{
	public static void main(String args[]){
		PetShop ps = new PetShop(5) ;	// 五个宠物
		ps.add(new Cat("白猫","白色的",2)) ;	// 增加宠物,成功
		ps.add(new Cat("黑猫","黑色的",3)) ;	// 增加宠物,成功
		ps.add(new Cat("花猫","花色的",3)) ;	// 增加宠物,成功
		ps.add(new Dog("拉步拉多","黄色的",3)) ;	// 增加宠物,成功
		ps.add(new Dog("金毛","金色的",2)) ;	// 增加宠物,成功
		ps.add(new Dog("黄狗","黑色的",2)) ;	// 增加宠物,失败    数组长度为5
		print(ps.search("黑")) ;
	}
	public static void print(Pet p[]){
		for(int i=0;i<p.length;i++){
			if(p[i]!=null){
				System.out.println(p[i].getName() + "," + p[i].getColor()
					+"," + p[i].getAge()) ;
			}
		}
	}
};

总结

本程序最主要的是接口的设计,    注意查询时indexof的使用,程序设计要严谨(一些判断的使用)。

时间: 2024-11-12 16:50:07

接口设计的一个程序实例(宠物商店)的相关文章

多次单击快捷方式,只运行一个程序实例

在应用程序安装之后,单击一次快捷方式,就运行一个程序实例,对于资源独占型程序来说,这样是不可以的,比如该程序使用了当前系统的某个端口,当同样的程序再次运行,再次试图占用同一个端口次,会提示"端口已经被占用的"异常.如此,必须在启动应用程序时,必须判断该程序是否已经有一个实例在运行.下面这个类中先判断该程序的实例有没有在运行,使用线程同步类EventWaitHandle(Boolean, EventResetMode, String)及注册正在等待 WaitHandle 的委托方法Reg

Winform程序只允许运行一个程序实例

/// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); /* * 利用互斥变量来控制应用程序只能运行一个 */ bool bRun = true; va

进程的互斥运行:CreateMutex函数实现只运行一个程序实例

HANDLE hMutex=CreateMutex(NULL,TRUE,"HDZBUkeyDoctorTool"); if(hMutex) { if(ERROR_ALREADY_EXISTS==GetLastError()) { MessageBox(NULL, "程序已在运行中!", "盾医生:", NULL); return FALSE; } } 原文地址:https://www.cnblogs.com/2018shawn/p/9435895

设置只能开启一个程序实例

在“Program.cs”中添加以下代码: [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); bool blnIsRunning; Mutex mutexApp = new Mutex(false, Assembly.GetExecutingAssembly().FullName, out blnIsRun

优秀的API接口设计原则及方法(转)

一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的打击就更大.如果API经常发生变化,用户就会失去对提供方失去信心,从而也会影响目前的业务. 但是我们为什么还要修改API呢?为了API看起来更加漂亮?为了提供更多功能?为了提供更好的性能?还是仅仅觉得到了改变了时候了?对于用户来说,他们更愿意使用一个稳定但是看起来不那么时髦的API,这并不意味着我们

微信小程序的Web API接口设计及常见接口实现

微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们设计和编写Web API平台是非常重要的,通过这个我们可以实现数据的集中控制和管理,本篇随笔介绍基于Asp.NET MVC的Web API接口层的设计和常见接口代码的展示,以便展示我们常规Web API接口层的接口代码设计.参数的处理等内容. 1.Web API整体性的架构设计 我们整体性的架构设计

监听器和 利 用观察者设计模式设计一个程序

一.监听器概念 1.事件源:发生事件的对象. 2.监听器:是一个接口,监听事件源上要发生的动作 3.事件:事件对象一般是作为监听器方法的参数存在的,它封装了发生事件的对象 二.Servlet中提供的监听器(8个) 八个监听器分类: 2.1监听ServletContext.HttpSession.ServletRequest对象的创建和销毁的监听器. ServletContextListener:监听ServletContext对象的创建和销毁. HttpSessionListener:监听Htt

[转]一个完整的Installshield安装程序实例

Installshield安装程序实例—基本设置一 前言 Installshield可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于上手和精通都不是容易的事情,之前都是用Installshield的Project Assistant对付过去的,这次做这个安装程序,为了实现一些功能,必须写代码,国内外现成的资料很少,而且很多都语焉不详,自己反复啃了多次,对比Installshiel自带的help,才明白资料所表达的意思.这个安装程序虽然比较简陋,在行家眼里可能是小菜一碟,但

如何设计好程序员自己的UI-RESTful 风格的接口设计。

最近在做一个客户端程序的架构设计,看了下服务器给的初版接口文档,发现做的非常不好,接口设计没有任何规范可言,也没有规律.着手修改了一下,给出了一些修改意见. 现在把这些心得分享给大家,希望大家以后再设计接口时,也能遵循这些规范,让我们的程序员在coding的时候能够更加顺手. 所谓RESTful架构,就是 Representational State Transfer.但是实际上这个词组少了一个主语 也就是Resources.资源的意思.合起来就是 资源 表现层的状态转化. 比较绕口不好理解.我