设计一个医院

源于个人网站:http://programmer.2008red.com/programmer/article_647_777_1.shtml

 

 

收到一封来自Exoweb的邮件,让去面试(败的很惨,呵呵。过了好长时间了,都忘记这事了,结果这公司来了邮件,说不能提供给我职位,还安慰我。不过就不过是了,弄这些做什么,害我出了一肚子火),就查了查这个公司。以前去面试过的前辈提到了他们会让我们设计医院,学校之类的东东,觉得应该先自己尝试做一下,就做了!

 

 

 病人Patient分别在各个部门挂号,交费,然后检查身体,具体的动作由各个部门去做(operation)。

 病人与部门分开,使用组合/聚合关系,个人觉得有点桥梁模式的意思!

假如将来医院增加新的部门,只要在Patient和Department下增加单层的子类就可以了。

 

具体代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace Hospital
{
    delegate void UpdateDelegate();


    abstract class  Patient
    {
        protected string name;

        public string Name
        {
            get { return this.name;  }
            set { this.name = value; }
        }

            
    }

    class Register:Patient
    {
      
    }

    class Payer:Patient
    {
      
    }

    class Inspector:Patient
    {
      
    }

    interface Department
    {
        void Operation();
    }


    class Registe:Department
    {
        public Patient patient;

        public Registe(Patient register)
        {
            this.patient = register;
        }

        public void Operation()
        {
            Console.WriteLine(this.patient.Name + "已登记!");
        }
       
    }

    class Pay:Department
    {
        public Patient patient;

        public Pay(Patient payer)
        {
            this.patient = payer;
        }

        public void Operation()
        {
            Console.WriteLine(this.patient.Name+"已交钱!");
        }
    }

    class Inspecte:Department
    {
        public Patient patient;

        public Inspecte(Patient inspector)
        {
            this.patient = inspector;
        }

        public Patient Patients
        {
            get { return this.patient; }
            set { this.patient = value; }
        }

        public void Operation()
        {
            Console.WriteLine(this.patient.Name + "已治疗!");
        }
    }

 

    class Treatment
    {
        public Department[]  dm=new Department[3];
            
        public Treatment(Patient d1,Patient d2,Patient d3)
        {
            dm[0]=new Registe(d1);
            dm[1] = new Pay(d2);
            dm[2] = new Inspecte(d3);
        }

        public void run()
        {
            dm[0].Operation();
            dm[1].Operation();
            dm[2].Operation();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            string name = "zhong";
            Register r1 = new Register();
            Payer p1 = new Payer();
            Inspector i1 = new Inspector();
            r1.Name = name;          
            p1.Name = name;           
            i1.Name = name;
            Treatment tm = new Treatment(r1,p1,i1);
            tm.run();

            Console.ReadLine();
           
        }
    }
}

挂号,交费,检查可以设置成一个观察者模式,在C#里当然是用委托来做最好了。

还可以设置很多病人,排队来看病。这可以用一个Arraylist或哈希表来存储各个病人的信息,用循环输出。

由于这是我写的第一个有关模式的文章,时间上也有点紧,不但上面的想法没去实现,可能还有一些我不

知道的错误缺点列在其中,希望大家原谅并指正。

 

希望自己能尽快实现这些没完成的想法。

 

和宿舍的人出去吃了个饭,今天端午,呵呵,晚上十二点回到宿舍后一点也不想睡,又开始写了起来,呵呵!

下面为用一个ArrayList记录病人的修改。

 

 {

   ***

 class Treatment
    {
      
        public Department[]  dm=new Department[3];
        public ArrayList list = new ArrayList();

        public void show(string name)
        {
            Register r1 = new Register();
            Payer p1 = new Payer();
            Inspector i1 = new Inspector();
            r1.Name = name;
            p1.Name = name;
            i1.Name = name;
            dm[0] = new Registe(r1);
            dm[1] = new Pay(p1);
            dm[2] = new Inspecte(i1);
            dm[0].Operation();
            dm[1].Operation();
            dm[2].Operation();
        }


        public void add(string name)
        {
            list.Add(name);
        }

        public void remove(string name)
        {
            list.Remove(name);
        }

        public void run()
        {
            foreach (string uh in list)
            {
                show(uh);
            }
         
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Treatment tm = new Treatment();

            string name = "zhong";      
            tm.add(name);                   
            tm.add("liu");
           // tm.remove("zhong");
            tm.run();

            Console.ReadLine();
           
        }
    }

}

这块是使用委托处理的程序:

 

 

{

  ***

 class Subject
    {
        public event UpdateDelegate UpdateHandler;
        public void add(UpdateDelegate ud)
        {
            UpdateHandler += ud;
        }

        public void remove(UpdateDelegate ud)
        {
            UpdateHandler -= ud;
        }

        public void run()
        {           
            if (UpdateHandler != null)
                UpdateHandler();           
        }
    }

    class Treatment
    {
       
        public Department[]  dm=new Department[3];
        public ArrayList list = new ArrayList();

        public Treatment(string name)
        {
            Register r1 = new Register();
            Payer p1 = new Payer();
            Inspector i1 = new Inspector();
            r1.Name = name;
            p1.Name = name;
            i1.Name = name;
            dm[0] = new Registe(r1);
            dm[1] = new Pay(p1);
            dm[2] = new Inspecte(i1); 
        }

        public void show()
        {
            dm[0].Operation();
            dm[1].Operation();
            dm[2].Operation();
        }
       
    }

    class Program
    {
        static void Main(string[] args)
        {
            Treatment t1 = new Treatment("zhong");
            Treatment t2 = new Treatment("liu");

            Subject sj = new Subject();
            sj.add(new UpdateDelegate(t1.show));
            sj.add(new UpdateDelegate(t2.show));
          //  sj.remove(new UpdateDelegate(t1.show));
            sj.run();
            
            Console.ReadLine();
           
        }
    }

}

 

 

分别实现了ArrayList和委托来处理多人的情况。也算是运用了观察者模式了。

转载于:https://www.cnblogs.com/sqlite3/archive/2009/06/06/2566671.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powerbi的功能介绍_Power BI:1分钟快速生成可视化报表

1.什么是Power BI ?Power BI 是微软推出的可视化工具,先来看看微软官方是怎么介绍的:使用用于自助服务和企业商业智能 (BI) 的统一、可扩展平台(该平台易于使用,可帮助获取更深入的数据见解),连…

易语言 java支持_开源Java客户端可以连接易语言服务器

我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后,都要先跟当前的客户端通信完之后才能再处理下一个连接请求。 这在并发比较多的情况下会严重影响程序的性能,为此,我们可以把它改为如下这种异步…

Javascript--File对象

描述: 提供对文件属性的访问.属性: 属性描述Attributes设置或返回文件或文件夹的属性DateCreated返回指定文件或文件夹的创建时间DateLastAccessed返回最近访问文件或文件夹的创建时间DateLastModified返回最后修改指定文件和文件夹的日期和日期Drive返回指定文件或文件夹所在的…

idea怎么调试jsp页面_解决idea的c标签错误

Hello,World.土土来啦!最近做jq项目,遇到各种各样的问题。首先就是c标签的错误。对,没错,就是这一串因为土土上学期学的是jsp,所以是在myeclipse做的,这学期就想在idea做后端。然后复制粘贴之前的项目的时候&#xff0…

[SlickEdit] SlickEdit支持目录别名FTP控件更新

有阵没写代码了,SlickEdit升级到2009还没怎么用过,Option面板改动得更像Eclipse了,反正IDE工具也不知道到底谁抄袭谁,只是Symbol Coloring设置太唬人了吧,,默认的symbol coloring总是出现字符偏移&#xff…

有一台服务器远程失败其他电脑可以_使用闲置电视盒子打造家庭网盘和远程下载器和小型服务器(二)...

使用闲置电视盒子打造家庭网盘和远程下载器系列(二)本系列分为五章一、综述二、电视盒子的root三、app的安装和服务器环境的搭建四、网盘系统的部署和使用五、远程下载系统搭建和实现昨天写了第一章,我这是首次写东西,没想到能得到这么多朋友关注&#x…

php echo 前后有字符串,php echo 输出字符串函数详解、多行输出方法

echo "abc";//字符串echo "abc$c";//字符串变量echo abc$c;//字符串 asd$c $c不是变量echo "abc"."de";echo "abc","de";echo $a;echo $a.$b;echo $a,$b;echo $a.$b.$c;echo $a,$b,$c;echo "abc{$c}de"…

基于C#.NET的--Windows进程管理工具

基于.NET(C#)编写。 实现了进程的树状显示父子关系,其中应用到了WMI编程,以及P-invoke. 下载地址: 点击右键另存为 地址如上,需要安装.NET环境,地址:http://www.microsoft.com/downloads/details.aspx?displaylangzh-…

php编译成二进制文件_2020年小米高级 PHP 工程师面试题

1、通过哪一个函数,可以把错误转换为异常处理?A:set_error_handlerB:error_reportingC:error2exceptionD:catch正确答案:A答案分析:set_error_handler () 可指定一个回调函数&#x…

php实现视频转gif,在Linux上将视频转换成动态gif图片

本文记录一下在linux上将视频转换成动态gif图片的方法。首先,需要在Linux系统上安装FFmpeg,我会用这个工具去解压从视频中解压出视频帧。下面的指令会解压出独立的视频帧,将它们保存为GIF图片。确保使用诸如("out%04d.gif")的输出文…

用GDB Server进行远程调试

某些时候由于模拟环境的限制,调试必须要在目标板上进行。由于嵌入式系统资源比较有限,一般不能在目标板上直接构建GDB的调试环境,这时我们通常采用gdbgdbserver的远程调试方法:gdbserver在目标板中运行,而gdb则在主机上…

前端的请求最大线程数是多少啊_面试官:创建多少个线程合适,我该怎么说?...

转载:https://mp.weixin.qq.com/s/j5d4Jtxo0RgJWgpnG9HxlQ为什么要使用多线程?防止并发编程出错最好的办法就是不写并发程序既然多线程编程容易出错,为什么它还经久不衰呢?A:那还用说,肯定在某些方面有特长…

php打印出函数的内容吗,PHP打印函数集合详解以及PHP打印函数对比详解(精)

1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 1 echo() 可以同时输出多个字符串,可以多个参数,并不需要圆括号,无返回值。 2 print() 只可以同时输出一个字符串,一个参数,需要圆括号,有返回值,当其执行失败时返flase .prin1 echo(…

正则表达式(1)

字符转义 大多数重要的正则表达式语言运算符都是非转义的单个字符。转义符 \(单个反斜杠)通知正则表达式分析器反斜杠后面的字符不是运算符。例如,分析器将星号 (*) 视为重复限定符,而将后跟星号的反斜杠 (\*) 视为 Unicode 字符 …

百度地图infowindow的close事件_百度地图蒙圈:车主要加油误导母婴店 跑偏理由令人啼笑皆非...

常在江湖飘,哪有不挨刀。经常驾车出门在外的您,有过被导航坑的经历么?其实在早些年手机导航刚刚兴起的时候,这类现象确实比较常见,但是到了如今大数据的时代,手机导航数据更新比较及时,问题已经…

Linux中后台执行scp

最近在一台远程机器上scp一个大文件,需要大半天才能完全down下来,用xshell工具执行完命令之后还不能关闭,否则的话就停止了,我的本本还不能一直放这开xshell。就想到nohup,但是scp命令输入密码是提示的,不能…

质量效能研发部php,【百度】百度质量效能研发部【社招/实习】

职位:百度质量效能研发部【社招/实习】-百度【岗位职责】C研发工程师 / iOS∧orid 开发工程师 / 平台开发工程师 / 算法工程师(智能测试方向) base 上海、北京 本次招录面向各程序栈的优秀同学们,开放社招及实习入口,四类方向供大家选择&…

商业模式新生代_业务分析基础 - 商业模式新生代01篇

商业模式画布商业模式新生代由亚历山大奥斯特瓦德(Alexander Osterwalder)和伊夫皮尼厄(Yves Pigneur)编写,发表于2016年。该书提出了商业模式画布模型,既可以用于创业公司(Start-ups&#xff0…

yum 安装 sun java,CentOS yum安装sun Java jre jdk和openjdk

在Linux下的tty终端下,安装sun jre,但是去Oracle安装,下载居然还要登录,使用cookie,没办法。直接到http://www.java.com/下载了。说明:如果使用yum install 安装软件,具体的软件名称不知道&…

CodePage简介(转)

CodePage简介(转) 1. Codepage的定义和历史 字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码. 双字节内码 -- Double-Byte character sets)(DBCS),可…