package com.accp.sys;
import org.apache.log4j.Logger;
import com.accp.test.*;
import com.accp.users.Admin;
import com.accp.users.Employee;
import com.accp.users.Guest;
public class Doorsystem {
public Door getDoor() {
return door;
}
public void setDoor(Door door) {
this.door = door;
}
public Computer getComputer() {
return computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
public Logger getLogger() {
return logger;
}
public void setLogger(Logger logger) {
this.logger = logger;
}
private Door door;
private Computer computer;
private Logger logger;
public void work(Admin admin)
{
logger = Logger.getLogger(AdminTest.class.getName());
System.out.println("管理员("+admin.getName()+")按开电动门[y/n]:");
String str = admin.PressOpenDoor();
if (str.equals("y"))
{
Door door = new Door();
door.openDoor();
logger.debug(logger);
System.out.println("管理员"+admin.getName()+"按下门铃");
logger.debug(logger);
System.out.println("管理员"+admin.getName()+"通过电子门");
System.out.println("*************************************");
if(door.getState().equals(door.OPEN))
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
door.closeDoor();
logger.debug(logger);
System.out.println("电子门已经关闭");
System.out.println("******************************");
}
}else
{
logger.debug(logger);
System.out.println("管理员"+admin.getName()+"没有按下门铃");
System.out.println("******************************");
}
}
public void work(Employee emp)
{
logger = Logger.getLogger(EmployeeTest.class.getName());
String str = emp.input();
Computer com = new Computer();
com.setInputMsg(str);
boolean bn = com.validate();
if(bn)
{
Door door = new Door();
door.openDoor();
logger.debug(logger);
System.out.println("身份验证通过 " + emp.getName()+"通过电子门");
System.out.println("******************************");
if(door.getState().equals(door.OPEN))
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
logger.debug(logger);
System.out.println(e.getMessage());
}
door.closeDoor();
logger.debug(logger);
System.out.println("电子门已经关闭");
System.out.println("******************************");
}
}else
{
logger.debug(logger);
System.out.println("身份验证失败");
System.out.println("******************************");
}
}
public void work(Guest guest)
{
logger = Logger.getLogger(GuestTest.class.getName());
Admin admin = new Admin("张三");
logger.debug(logger);
System.out.println("访客("+guest.getName()+")来访:");
String str = guest.PressRing();
if(str.equals("y"))
{
logger.debug(logger);
System.out.println("访客("+guest.getName()+")按下门铃,请等待管理员是否开启");
logger.debug(logger);
System.out.println("管理员("+admin.getName()+"):");
String sr = admin.PressOpenDoor();
if (sr.equals("y"))
{
Door door = new Door();
door.openDoor();
logger.debug(logger);
System.out.println("管理员"+admin.getName()+"按下门铃");
logger.debug(logger);
System.out.println("访客"+guest.getName()+"通过电子门");
System.out.println("*************************************");
if(door.getState().equals(door.OPEN))
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
door.closeDoor();
logger.debug(logger);
System.out.println("电子门已经关闭");
System.out.println("******************************");
}
}else
{
logger.debug(logger);
System.out.println("管理员"+admin.getName()+"拒绝开启电子门");
System.out.println("******************************");
}
}else
{
System.out.println("访客("+guest.getName()+")没有按下门铃");
}
}
}
门禁系统的面向对象设计
需积分: 0 57 浏览量
更新于2008-09-12
收藏 343KB RAR 举报
门禁系统是现代建筑安全管理的重要组成部分,主要用于控制人员的进出,确保区域安全。在这个北大青鸟S2项目案例中,我们将探讨如何运用面向对象的设计原则和方法来构建一个高效的门禁系统。面向对象设计(Object-Oriented Design,OOD)是一种以对象为中心,通过类和对象的关系来组织软件结构的设计方式。
1. **对象与类**: 在门禁系统中,我们可以定义多个对象,如“门”、“用户”和“控制器”。门是系统的基本实体,具备开关状态;用户代表有权限进入的人,包含身份信息;控制器负责处理门禁逻辑,如验证用户身份。这些对象都封装在各自的类中,每个类都有其特定的属性(如门的状态、用户的ID)和方法(如门的开关操作、用户的身份验证)。
2. **继承与多态性**: 为了实现代码复用和灵活扩展,我们可以利用继承。例如,可以有一个基础的“用户类”,然后派生出“员工类”和“访客类”,它们共享一些基本属性,但又有各自的特殊属性和行为。多态性则体现在不同类型的用户对门禁的操作可能有所不同,如员工可能有固定的通行时段,而访客需要临时授权。
3. **接口与抽象类**: 设计时,可以定义“门禁接口”来规定所有门禁设备必须实现的方法,如“验证”和“开启/关闭”。这样,即使将来添加新的门禁类型,只要实现这个接口,就能无缝集成到系统中。抽象类可以作为门禁控制器的一个基类,定义通用的行为,如身份验证框架,子类可以根据具体需求进行扩展。
4. **状态与策略模式**: 门禁系统中的门和用户状态管理可以通过状态模式来实现,使状态变化的复杂逻辑更加清晰。同时,可以使用策略模式来处理不同的验证策略,如基于卡的验证、面部识别验证等,根据实际需求动态切换。
5. **观察者模式**: 当门的状态发生变化时,如开关门或用户验证失败,可以采用观察者模式通知相关的组件,如报警系统、监控系统,实现事件驱动的交互。
6. **工厂与单例模式**: 门禁控制器和门的实例化可以通过工厂模式来统一管理,确保正确地创建和配置对象。对于系统中全局唯一的对象,如数据库连接,可以使用单例模式来保证只有一个实例存在。
7. **设计原则**: 遵循 SOLID 原则(单一职责、开闭原则、里氏替换、接口隔离、依赖倒置),可以使系统更易于理解和维护。例如,每个类只负责一项功能,不违反单一职责原则;设计时考虑到扩展性,使得系统对修改关闭,对扩展开放。
面向对象设计在门禁系统中发挥着关键作用,通过合理地组织对象、类和它们之间的关系,我们可以构建出一个模块化、可扩展、易于维护的系统。在这个北大青鸟S2项目案例中,学生将有机会深入实践这些设计原则和模式,提升自己的编程技能。
haotianyingxin1983
- 粉丝: 0
- 资源: 5
最新资源
- 基于Flink商品实时推荐系统详细文档+全部资料.zip
- 基于flink流数据处理平台详细文档+全部资料.zip
- 基于flink实时流计算任务详细文档+全部资料.zip
- 基于Flink实现实时冰蝎(Behinder)流量检测详细文档+全部资料.zip
- 基于Flink实现的商品实时推荐系统、flink统计商品热度,放入redis缓存,分析日志信息,将画像标签和实时记录放入Hbase,根据用户画像重排序热度榜,并
- 基于flink统计实时ip热点统计详细文档+全部资料.zip
- 基于flink用户画像的基本代码详细文档+全部资料.zip
- 基于Flink用户埋点行为日志分析平台,项用户行为日志收集、存储、分析平台,支持用户自定义查询条件详细文档+全部资料.zip
- 基于flink最新的[FLIP-27]架构对MQTT connector的实现详细文档+全部资料.zip
- 基于Flink与Storm的流式计算详细文档+全部资料.zip
- 远卓—深圳庄维房产—庄维年度培训计划申请表1206.doc
- 远卓—深圳庄维房产—庄维培训实施申请表1206.doc
- 远卓—深圳庄维房产—庄维培训计划制定流程V0.95why1206.doc
- 远卓—深圳庄维房产—庄维年度培训计划申请表V0.95why1206.doc
- 远卓—深圳庄维房产—庄维培训计划制定流程1206.doc
- 远卓—深圳庄维房产—庄维员工培训制度1206.doc