职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 353|回复: 6

探讨一个比较复杂的算法,设计模式

[复制链接]
郁闷小男人 发表于 2011-8-26 10:31 | 显示全部楼层 |阅读模式
现有左右两个颗树JTree,从左树移动节点到右树的时候.需要对左树选中的节点作判断,符合条件才可以
移到右树中.
a:左树节点中,有两个属性:instanceType , deploynodeType
instanceType 有三个枚举值:1(单实例单节点), 2(多实例), 3(单系统单实例)
deploynodeType有四个枚举值:1(只能部署到主服务器),2(只能部署到从服务器),3(任意类型的服务

器).4(每他服务器必须都要有)
b:右树节点:存在的多个服务器类型.主服务器只有一个,从服务器有多个.
详细说明一下instanceType :
1: (单实例单节点)每个服务器只能部署一次
2: (多实例).任意服务器都可以部署
3: (单系统单实例).所有服务器中总共只能部署一次
左树:待部署的节点.
从左树节点移动到右树节点时,对服务器类型的节点选中才会判断.


中间的实现从左到右的移动,希望不要出现一堆的if-else.
不然也不叫设计模式了.

醉倚西风 发表于 2011-8-26 10:31 | 显示全部楼层
不是所有的工作都要设计模式来做
设计模式里也未必不会出现if else

木已 发表于 2011-8-26 10:32 | 显示全部楼层
桥接模式?

秋秋 发表于 2011-8-26 10:32 | 显示全部楼层
不知道可不可以这样:
1:抽取出固定算法
2:根据不同参数,由固定算法计算是终结果是否为:true/false
3:根据true/false来决定是否移动节点。

instanceType : 1,2,3
deploynodeType: 100,200,300(把间隔拉开,以便不同组合值不会重复)

两属性和的不同组全为:101,102,103, 201,202,203, 301,302,303


假设:服务器类型值:仅选中主服务器为:100, 仅选中从服务器为:200, 即选中主又选中从:300

     选中数目值: 选中一个为:1,选中多个为:2,其它(单系统单实例不知怎么说):3

那么算法可以抽取为: 服务器类型值 + 选中数目值  与 两属性之和  比较


方法: boolean canMove(两属性之各,选中的服务器类型值,选中服务器的数目值){
       return (服务器类型值 + 选中数目值) < 两属性之各;           

}


上面只是说明原理,可能算法并不正确。仅供参考。

只学java 发表于 2011-8-26 10:32 | 显示全部楼层
1.定义一个接口,接口中1个方法(将结点移动到右树,可能需要copy结点,这个由具体实现类决定)
2.定义一个工厂类,根据instanceType , deploynodeType 返回不同的实现1接口的类实例。
3.运行该实例的方法。

我认为设计模式是解决一系列类似问题的模板,而解决具体问题应该是算法,算法可以包含多种设计模式。2楼说的没错。

只学java 发表于 2011-8-26 10:32 | 显示全部楼层
始终认为设计模式只是用来更好的组织代码,减少重复代码、把逻辑和功能去耦用的

已经来了吗 发表于 2011-8-26 10:32 | 显示全部楼层
状态模式可以去掉过量的if else
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-4 12:48 , Processed in 0.150947 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表