机房收费系统合作版(五)——初识委托

委托是什么?你对委托熟悉吗?答案是肯定的!你对委托一定很熟悉!对委托的熟悉,正如你对一个倒立着的人一样熟悉!为什么这么说?因为方法的调用对于每一个学习过编程的人来说都很熟悉,而且是熟悉的不能再熟悉了!那么方法的调用和委托又有什么关系呢?其实委托就是将被动调用改为了主动服务。

委托其实就是一种思想的转变:由以前的被动调用方法转变为,主动服务于某个方法。将方法间的交互思维做了一个转变。学习过三层的人不难想象方法之间的调用关系吧,那么使用了委托之后他们方法之间的关系又是什么样的呢?(借用两张图展示一下)

图一:是用委托

图二:未使用委托

从宏观的角度弄清楚了“委托”是什么了。再用一段代码来展示委托更加细节的一面:

**委托的定义:

注意观察委托的定义,不难发现,委托与类同级。

//定义委托
public delegate void AddEventHandler<T>(T t);
public delegate void DeleteEventHandler<T>(T t);
public delegate void UpdateEventHandler<T>(T t);
public delegate void QueryEventHandler<T>(T t);
public delegate T IsExistsEventHandler<T>(T t);

**委托的事件:

注意观察事件的定义,不难发现,事件与方法同级。

//定义事件
public event AddEventHandler<T> AddEvent;
public event DeleteEventHandler<T> DeleteEvent;
public event UpdateEventHandler<T> UpdateEvent;
public event QueryEventHandler<T> QueryEvent;
public event IsExistsEventHandler<T> IsExistsEvent;

**将方法与委托绑定:

+= new AddEventHandler<T>(this.manager.Add);
+= new DeleteEventHandler<T>(this.manager.Delete);
+= new UpdateEventHandler<T>(this.manager.Update);
+= new QueryEventHandler<T>(this.manager.Query);
+= new IsExistsEventHandler<T>(this.manager.isExist);

**为事件装载委托:

this.AddEvent += new AddEventHandler<T>(this.manager.Add);
this.DeleteEvent += new DeleteEventHandler<T>(this.manager.Delete);
this.UpdateEvent += new UpdateEventHandler<T>(this.manager.Update);
this.QueryEvent += new QueryEventHandler<T>(this.manager.Query);
this.IsExistsEvent += new IsExistsEventHandler<T>(this.manager.isExist);<strong style="color: rgb(51, 51, 255);">
</strong>

**整个登录窗体的外观层代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Login.Model.Entity.Base;
using Login.Model.Adapter;
using Login.Model.Entity;
using System.Reflection;
namespace Login.Controller
{
    //定义委托
    public delegate void AddEventHandler<T>(T t);
    public delegate void DeleteEventHandler<T>(T t);
    public delegate void UpdateEventHandler<T>(T t);
    public delegate void QueryEventHandler<T>(T t);
    public delegate T IsExistsEventHandler<T>(T t);

    public class FacadeManager<T, TCollection>
    {
        private superManager<T,TCollection> manager;

        //定义事件
        public event AddEventHandler<T> AddEvent;
        public event DeleteEventHandler<T> DeleteEvent;
        public event UpdateEventHandler<T> UpdateEvent;
        public event QueryEventHandler<T> QueryEvent;
        public event IsExistsEventHandler<T> IsExistsEvent;

        public FacadeManager(T t)
        {
            this.manager = this.createManager(t);

            this.AddEvent += new AddEventHandler<T>(this.manager.Add);
            this.DeleteEvent += new DeleteEventHandler<T>(this.manager.Delete);
            this.UpdateEvent += new UpdateEventHandler<T>(this.manager.Update);
            this.QueryEvent += new QueryEventHandler<T>(this.manager.Query);
            this.IsExistsEvent += new IsExistsEventHandler<T>(this.manager.isExist);
        }

        /// <summary>
        /// 创建对应的Manager
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public superManager<T,TCollection> createManager(T t){

            string className = typeof(T).ToString() + "Manager";
            className = className.Substring(className.LastIndexOf('.')+1);
            //return (superManager<T>)Assembly.Load("Login").CreateInstance("Login.Controller." + className);
            //参数数组
            Object[] o =new Object[1];
            o[0]=t;
            return (superManager<T,TCollection>)Assembly.Load("Login").CreateInstance("Login.Controller." + className, false, System.Reflection.BindingFlags.Default, null, o, null, null);

        }

        /// <summary>
        /// 判断是否存在
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public T isExist(T t)
        {
            //return manager.isExist(t);
            return this.IsExistsEvent(t);
        }

        public bool add(T t)
        {
            throw new NotImplementedException();
        }

        public bool update(T t)
        {
            throw new NotImplementedException();
        }

        public bool delete(T t)
        {
            throw new NotImplementedException();
        }
    }
}

总结:

天下之事难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。

时间: 2024-10-13 17:26:49

机房收费系统合作版(五)——初识委托的相关文章

机房收费系统合作版(七)——总结

历经许许多多的磨难机房收费系统合作版终于告一段落了.在机房收费系统中的收获我不能说自己收获的太少了.因为相比之前任何一个阶段的学习,这个阶段是我收获的最多,感悟最多的一个阶段. 技术: 初识框架,对它有一种莫名的好感,很是喜欢.也从这个好框架中感受到了自己的与XS,LSH他们的差距.他们是搭这个架构的人,而自己光是对这个架构的学习就整整花了一周.这就是显而易见的差距. 带着莫大的好奇心,和连海苦战两天,照猫画虎,也搭建了属于这个系统的"框架".为了练手,我俩还搭建了Jenkins.由于

机房收费系统合作版(四)——泛型之解

************前言: 开篇起笔先问:"泛型是什么"?解:泛型是类型抽象类.作用是什么:"通过对类型的抽象,封装,大量减少我们的代码量". 从开始学习面向对象,"抽象"一词就不断的在耳边重复.但是在没有做过项目之前,尤其是在没有尝试着用面向对象的思维去做项目之前,"抽象"在脑子里永远都是一个虚无缥缈的词儿.那么在具体的项目中,我们是如何一步一步地把"抽象"变得具体课件的呢?--继承,泛型-- ***

机房收费系统合作版(一)——框架搭建

机房收费系统的合作版中首次尝试使用框架:三层 + Spring.NET +Nhibernet框架. 一.整体框架图如下: 二.三层架构图如下: DAL层: Adapter: 结构: 实现IRepositoryDAL接口:扩展 继承RepositoryBaseDAL父类:复用 功能: 操作类:封装基本的操作--增删改查 this.HibernateTemplate.Save(entity) this.HibernateTemplate.Delete(entity) this.HibernateTe

机房收费系统合作版——VS2013自带报表

机房收费系统已经敲过两次了,每次敲的感觉都不一样,收获也不一样. 第一次敲机房,主要是克服对代码的恐惧,只要将功能实现就行:而第二次,主要就是加入前期对整个系统的分析.设计,然后在实践中理解三层架构以及对设计模式的应用:现在是第三次敲,主要是锻炼我们团队合作的能力,大家的讨论研究,合作交流等.由此可见,我们走的每一步都很重要,都是必不可少的. 今天我们来说一说我们的vb.net中自带的报表. 一.报表的制作 1,我们右击U层所在文件夹添加"新建项". 2,在弹出的的添加新建项窗口中找到

机房收费系统合作版(五)——初识托付

托付是什么?你对托付熟悉吗?答案是肯定的!你对托付一定非常熟悉! 对托付的熟悉,正如你对一个倒立着的人一样熟悉!为什么这么说?由于方法的调用对于每个学习过编程的人来说都非常熟悉,并且是熟悉的不能再熟悉了!那么方法的调用和托付又有什么关系呢?事实上托付就是将被动调用改为了主动服务. 托付事实上就是一种思想的转变:由曾经的被动调用方法转变为,主动服务于某个方法.将方法间的交互思维做了一个转变.学习过三层的人不难想象方法之间的调用关系吧,那么使用了托付之后他们方法之间的关系又是什么样的呢?(借用两张图

机房收费系统合作版(二)——初识Git

研究了一天半的Git.查阅了不少资料,这里将Git的运用分为两条线做个简单梳理:本地控制库.远程控制库. **************************************本地控制库********************************************* 本地库中须要用到几个工具,这里做简介. 图形化工具: msysgit: Git forWindows是Github官方的管理工具. 它的操作都是採用命令行的形式完毕的,所以可能更加适合习惯Linux命令行的人. Gi

项目总结——机房收费系统合作版

机房合作就结束了,这次合作开发是第一次与别人一块儿开发一个系统,收获还是蛮大的.以下我总结几点算是经验吧,供以后參考: 管理上 1.计划 在准备合作开发之前我们三个去找米老师,老师给我们规定了时间.半个月.尽管计划是组长制定的,但假设没 有一个明白的计划规定什么时间段干什么.面对绘图,文档,代码实现,调试等等,项目就不可能有条不紊的进行. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd6aWppZWppYXlvdQ==/font/5a6L

机房收费系统合作版(三)——UI思索

案件追踪系统1.0暂告一段落.验收过程中,MR MI针对UI界面提出了许多自己的想法.针对TGB项目的UI设计我也有我的感受: 1.不论大小项目,只要一看界面准有70%到80%熟悉度. 2.一看这些项目,大概能够猜测到是同一伙儿做出来的. 3.只有我们开发人员(熟悉业务逻辑的人)知道下一步该做什么. *****惨遭嫌弃的UI******: 举个例子.感受最深的是当时的基础系统采集数据.数据采集时,正直2014年最炎热时,顶着硕大的高温来往于至善楼与数理楼之间.数据采集之初,想象的很美好:我们只是

机房收费系统VB版(一)——系统分析

      首先,我们先回答两个个问题:         1.机房收费系统"是什么"?         2.机房收费系统应该"干什么"?        我的回答:         1.机房收费系统顾名思义就是一个收费系统.         2.机房收费系统主要任务流程是:注册--充值--上机--下机--退卡.而其他的功能都是各个部分人员主要负责的功能.       然后,我们进一步分析一下这个系统的功能. 我们可以把这个系统比作网吧的收费系统,而它的主要面对对象是学