统一对象消息编程(2)—对象消息编程框架1(基本接口)

        前面我们通过大概分析了现实中事物的关系及编程规范,消息对象之间关系应该是下图这样的,对象之间只有一个公共方法putMsg,通过这个方法来传递消息,其他任何方法为对象内部方法,其他对象不能调用,只能由对象自己调用。

       根据前面定义的对象编程规范,现在就这规范下开始代码实现。对象消息编程框架,与其说框架,不如说是定义一种对象的模板,所有的对象基于定义的统一的对象模板而实现。代码见文章下面链接。我建议有兴趣的朋友下载代码试试,当对象之间通过消息而互动的时候,因为没有了对象之间耦合与依赖,出现许多有趣的事情,也极大的方便了编程,这是我开始都没有想到 。下面对对象模板或框架简单说明。

一、程序包介绍

       源码中程序包结构如下;

cn.tianlong.tlobject 为通用包,其中base包是最基础包,里面包含上面所说的对象模板,,其他的包,如db、network、cache是我根据对象模板而开发的其他实用类,用于测试,不一定适用与生产。

cn.tianlong.java 是根据通用包而开发的实际应用环境。其中servletutils包是在tomcat下开发的一个web框架,tlojbectdemo 是普通的环境下java编程框架。这里所说的框架没有任何约束定义,只是类继承所定义的类模板。

二、基础包 cn.tianlong.tlobjcec.base 

     base包下类如下;

       这个包中,基本的类只有6个:IObject  、TLBaseObject 、TlBaseModule 、TLMsg、TlObjectFactory、TLModuleConfig 。前三个是定义的类、对象模板,TLMsg为定义的消息类,TLObjectFactory为对象工厂,也就是统一创造者,TLModuleConfig为对象配置文件读取类。其他的类为一些基于对象模板而开发的实用类,比如日志类,消息广播类、配置文件监控类,这些类根据情况可用不用。以后开发的web框架及应用框架也都是根据上面六个基本类而来。类关系图如下:

(1)IObject 接口

         源码;

public interface IObject  {

    String getName();
    TLMsg putMsg(IObject toWho, TLMsg msg);
    TLMsg getMsg(Object fromWho, TLMsg msg);
}

     IObject是最基本的类模板,IObject用接口的方式实现,里面只有三个方法,其中主要的是发送消息putMsg ,接受消息 getMsg。如果A给B发送消息,则A.putMsg(B,msg)。对于不能继承模板类的情况下,可以用实现该接口的方式来实现。

 在接口中还有一个方法 getName,用于获取对象的名字。在我们现实中,任何对象都有个名字,人们通过名字而传递信息,因此消息对象的使用也主要通过名字,名字为字符,方便传递、存储。

(2)TLBaseObject 抽象类

源码;

public abstract class TLBaseObject implements IObject ,TLParamString{
    protected String name;
    public TLBaseObject() {
         name=getClass().getSimpleName();
    }
    public TLBaseObject(String name )
    {
        this.name=name ;
    }

    protected TLMsg createMsg(){
        TLMsg cmsg =new TLMsg() ;
        cmsg.setSource(name);
        cmsg.setNowObjcect(name);
        return  cmsg ;
    }
    public String getName() {
        return name;
    }
    public TLMsg putMsg(IObject toWho, TLMsg msg) {
        TLMsg pmsg=createMsg().copyFrom(msg);
        pmsg.setPrevious(name);
        pmsg.setNowObjcect(toWho.getName());
        if (msg.getWaitFlag()==true)
            return toWho.getMsg(this, pmsg);
        else
        {
            putMsgNoWait( toWho, pmsg) ;
            return null ;
        }
    }
    /**  异步put****/
    public void putMsgNoWait(IObject toWho,TLMsg msg){

        new ThreadTask(toWho,msg,this).start();
    }

    private class  ThreadTask extends Thread{
        private IObject toWho ;
        private IObject fromWho ;
        private TLMsg msg;
        public ThreadTask(IObject toWho ,TLMsg msg,IObject fromWho){
            this.toWho=toWho;
            this.msg =msg ;
            this.fromWho=fromWho;
        }
        @Override
        public  void run(){
            msg.setWaitFlag(true);
            toWho.getMsg(fromWho,msg);
        }
    }

TLBaseObject 是对上面IObject接口的一个抽象实现。里面主要的是实现了putMsg方法。方法的实现其实是实现两个对象的信息交换,一个putMsg,那么另一个就是getMsg。主要代码其实就一句;

return toWho.getMsg(this, pmsg);、

对于消息,有同步、异步消息之分,这里同步消息直接送出,异步消息则启动一个线程而发出。通过检测消息里面的异步标志来自动判断。消息对象msg里面 waitflag属性定义消息是否为异步。以后对于异步发送,简单设置消息的异步标志就可以了。

if (msg.getWaitFlag()==true)
    return toWho.getMsg(this, pmsg);
else
{
    putMsgNoWait( toWho, pmsg) ;
    return null ;
}

基本上到这里,消息对象模板类已经建立,任何继承TLBaseObject类的对象只要实现getMsg就可以完成消息的互动(putMsg已经实现),对象只负责如何内部处理收到的消息。不过这个类还比较简单,现实中的事情更复杂,在TLBaseObject基础上进一步丰富功能,这就是下面介绍的TLBaseModule。TLBaseModule是最重要的对象模板,以后的类基本继承它。在下一节详细分析它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面向对象编程电子书是一本详细介绍Java面向对象编程概念、原理和实践的电子书籍。本书从基础概念开始,逐步深入到高级主题,使读者能够全面理解Java面向对象编程的核心思想和技术。 首先,本书会介绍面向对象编程基本理念和原则,例如封装、继承和多态等。读者将能够了解到如何使用Java语言中的类、对象和方法来实现这些概念,并学会如何通过类和对象之间的关系来进行数据和行为的组织。 接着,本书将详细介绍Java中的类和对象的创建、属性和方法的定义以及对象之间的交互。读者将学会如何使用构造函数来创建对象实例,并掌握如何在类中定义属性和方法,并使用它们来访问和修改对象的状态。 另外,本书还会涵盖继承和多态的概念和实践。读者将了解到如何通过继承来创建子类,并使用多态来实现不同对象之间的统一接口。这些技术将大大提高代码的可复用性和可扩展性。 此外,本书还会介绍Java面向对象编程中的其他重要概念,如抽象类、接口、封装和设计模式等。这些概念和技术将使读者更加熟悉Java面向对象编程的整体框架,并能够应用到实际的开发中。 总而言之,Java面向对象编程电子书是一本很好的学习资料,它详细介绍了Java面向对象编程基本概念、原则和实践。读者通过学习本书,将能够深入理解并掌握Java面向对象编程的核心思想和技术,从而提高自己的编程能力和应用水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值