做Swing桌面程序,该怎样将组件与业务逻辑分离?

3 篇文章 0 订阅
本文探讨了如何在Swing桌面程序中实现组件与业务逻辑的分离,通过创建不同的包结构和接口,如IListener、IService,以及使用EventMgr管理事件。示例展示了登录功能的实现,包括LoadFrame、LogonService和LogService等类的设计,通过事件驱动和回调方法确保界面和逻辑的解耦。
摘要由CSDN通过智能技术生成

做Swing桌面程序,该怎样将组件与业务逻辑分离?

这是一个问题。

因为没有深入学习过这方面的知识,所以自己也没有想过如何能实现这种分离。

 

今天有个朋友用Swing做了一个小的桌面程序,是一个简单的管理系统。

代码很复杂,主要是写的很复杂,没有逻辑和层次感,

到处是组件,到处是判断,每追加一个功能,代码就要翻来翻去找很久。

 

于是今天晚上自己闲来无事,简单的写了一些代码,

看是否可以将组件与业务逻辑分离开呢?

 

 

如果大侠看到了不要见笑啊~

 

首先,我要的是一个登录界面,

界面很简单,上面留一个JLabel的位置,输出错误提示信息用。

然后下面就是 用户名和密码 的输入框。

见下图:

 

登录界面

待用户输入用户名和密码后,点击登录按钮,根据用户名和密码进行验证。

如果用户名和密码为空,则报错。

如果填写了用户名和密码,则认为登录成功,由于只是演示,就没有真正的去实现如何验证。

 

现在代码的结构是这样的。

|--com

    |--bzwm

        |--testp

            |--common

            |--event

            |--frame

            |--listener

 

如上图,主要由4个包。

common包,放一些通用的类,可以有一些工具类等等。

这次我将EventMgr.java放在common包下,用来管理事件。

 

event包,放入每个动作的event,

我先定义了一个抽象类BaseEvent.java

然后是本次要实现的功能的事件:LogonEvent.java

 

frame包,是一些画面的实现类。

本次登录用的LoadFrame.java放在这个包下。

 

listener包,是放具体的业务逻辑实现类的。

首先定义接口 IListener.java

画面实现 IListener 接口,方便回调回主画面,方便根据业务逻辑处理结果来重画组件。

然后定义接口 IService.java

业务逻辑类要实现 IService 接口,

我在这个接口中定义了两个方法,

第一个方法,检查用户的输入数据是否正确,或者说操作是否正确,

第二个方法,根据用户的输入和事件,来完成业务逻辑处理。

本次登录用的逻辑类 LogonService.java 实现了IService 接口。

 

好,结构介绍完了,

来看代码。

1.IListener.java

 

2.IService.java

 

3.LoadFrame.java

主画面,程序的入口,实现了IListener接口

4.LogonService.java

登录事件的逻辑处理类

实现了IService接口

5.EventMgr.java

管理事件

6.BaseEvent.java

抽象类,抽象的事件

这其中的设计还很有待商榷

7.LogonEvent.java

用户登录事件

 

根据上述代码,基本功能完成了。

 

也许会感觉为这一点功能写这么多类不值得,

但代码会清晰一点,虽然设计上,比如类的构造上还不够合理,

我也没思考太多,想到这些就写出来了。

 

不过这样还有一个好处,比如说,你想给登录事件加输出log的功能,

那么比较简单,

只要写一个类,实现了IService即可。(因为log写在本地文件里,所以不用回调回主画面)

然后在LoadFrame.java中的构造方法改一下就OK了。

下面是输出log用的service

 

8.LogService.java

接着,改 LoadFrame.java类。

只写出改的部分,它的构造方法:

这样,把代码拷贝下来,

重新运行下,就出现log了。

 

这只是登录的功能,

如果还要完成注册的功能,

则还是一样的步骤,

写一个Dialog类,继承JDialog,实现IListener接口,

定义一个RegEvent.java继承BaseEvent.java,

写一个RegService类,实现IService接口,

总之把相应包下面,加入自己的实现,

然后将监听还是注册到EventMgr里就可以实现了。

 

好了。欢迎交流,谢谢!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值