经过最近潜心研究,基于上次说过的草根想法 对象,你喜欢极品装备吗? 实现了一个简单的装备模式。
然后写了一个弱弱的实现框架,目前肯定无法投入到开发中使用,只是想证明这条路可以走走看~~~
框架也没名字,临时叫OMM(简单好记),下面让各位看一下使用方法和HelloWorld示例。
首先,需要一个POJO,这次用User,他有中英文两种名字。在中国叫他的中文名,在外国叫英文名(废话)。
注意:需要jdk5.0+
java 代码
- package ddd.domain;
-
-
-
-
-
-
-
-
-
-
- public class User {
- private String name_ch;
- private String name_en;
- public String getName_ch() {
- return name_ch;
- }
-
- public void setName_ch(String name_ch) {
- this.name_ch = name_ch;
- }
-
- public String getName_en() {
- return name_en;
- }
-
- public void setName_en(String name_en) {
- this.name_en = name_en;
- }
- }
然后,我们要制作两件"HelloWorld"要用的装备,让User可以say hello,一个说英语,一个说汉语的。
java 代码
- package ddd.equip;
- import com.mewleo.oo.ddd.Equip;
- import com.mewleo.oo.ddd.Return;
-
- import ddd.domain.User;
-
-
-
-
-
-
-
- public class User_EnglishHello_Equip implements Equip<user></user><user></user>{
- User u;
- public void execute(Return caller, Object parm) {
- String name=(String)parm;
- System.out.println("Hello "+(name==null?"":name)+"! I'm "+u.getName_en());
- }
-
- public void init(User pojo) {
- u=pojo;
- }
-
- }
java 代码
- package ddd.equip;
- import com.mewleo.oo.ddd.Equip;
- import com.mewleo.oo.ddd.Return;
-
- import ddd.domain.User;
-
-
-
-
-
-
-
- public class User_ChineseHello_Equip implements Equip<user></user><user></user>{
- User u;
- public void execute(Return caller, Object parm) {
- String name=(String)parm;
- System.out.println("你好 "+(name==null?"":name)+",我是"+u.getName_ch()+"!");
- }
-
- public void init(User pojo) {
- u=pojo;
- }
-
- }
大家可以发现,在接口部分使用了jdk5的泛型类,实现Equip接口的两个方法。Equip接口的装备只有一种动作Method!
然后,我们再来制作一件极品装备(一般来说,在游戏里普通装备是白色的名字,只有一种属性功能,而极品装备一般是
彩色名字,并且拥有多种属性功能,口水。。)
java 代码
- package ddd.equip;
- import com.mewleo.oo.ddd.JPequip;
- import com.mewleo.oo.ddd.PackObject;
-
- import ddd.domain.User;
-
-
-
-
-
-
-
-
- public class User_JPEquip extends JPequip {
- User u;
- @Override
- public void init(User pojo) {
- u = pojo;
- }
- @Override
- public User_JPEquip setUp() {
- return this;
- }
- @Override
- public Object defaultMethod(String actionName, Object parm) {
- System.out.println("[BETA]Making In China @By MewLeo ...");
- return null;
- }
-
-
- @SuppressWarnings("unchecked")
- public Object info(Object parm){
- PackObject<user></user> user=(PackObject<user></user>)parm;
- return "User ["+user.getPojo().getName_en()+"] equiped ["+user.getSuit().getSuitName()+"]";
- }
-
- }
极品装备比较特殊,所以需要继承于一个 极品类,这样才能属性极品装备家族,里面有两个方法,一个是默认方法,一个是
显示对象装备信息的方法。当找不到极品装备中的某个方法时会调用默认方法。
到现在,我们的User装备已经准备完成了,下面要定义套装了。套装是为了适合不用的场景与环境搭配的。
这里我们假设两个场景,一个是User在中国,另一个是User在英国。
java 代码
- package ddd.suit;
- import com.mewleo.oo.ddd.EquipUp;
- import com.mewleo.oo.ddd.PackObject;
- import com.mewleo.oo.ddd.Suit;
-
- import ddd.domain.User;
- import ddd.equip.User_ChineseHello_Equip;
- import ddd.equip.User_JPEquip;
-
-
-
-
-
-
- public class User_China_Suit implements EquipUp<user></user> {
-
- User_JPEquip jpuser=new User_JPEquip();
- public Suit<user></user> getSuit(PackObject<user></user> po) {
- Suit<user></user> s=new Suit<user></user>(po,"中国");
- s.setEquip("hello", new User_ChineseHello_Equip());
- s.setEquip("info", jpuser);
- s.setEquip("noaction", jpuser);
- return s;
- }
- }
java 代码
- package ddd.suit;
- import com.mewleo.oo.ddd.EquipUp;
- import com.mewleo.oo.ddd.PackObject;
- import com.mewleo.oo.ddd.Suit;
-
- import ddd.domain.User;
- import ddd.equip.User_EnglishHello_Equip;
- import ddd.equip.User_JPEquip;
-
-
-
-
-
-
- public class User_English_Suit implements EquipUp<user></user> {
-
- User_JPEquip jpuser=new User_JPEquip();
- public Suit<user></user> getSuit(PackObject<user></user> po) {
- Suit<user></user> s=new Suit<user></user>(po,"english");
- s.setEquip("hello", new User_EnglishHello_Equip());
- s.setEquip("info", jpuser);
- s.setEquip("noaction", jpuser);
- return s;
- }
- }
套装中的装备绑定的名称,就是对象最终获得的动作action方法。
好了准备完毕了,看一看结构,是这样的树:
DDD
|—domain
| |—POJO
|—equip
| |—装备
|—suit
| |—套装
这里没用di容器,因为还有好多地方没有做优化,尤其是在众多装备的管理方面,将来对象的原子动作如果很多,那这里就会
相当难管理,这个问题要借助guice帮助,实现中···
好了,下面看一下如何让他们工作,并让User say hello!
java 代码
- package ddd;
- import com.mewleo.oo.ddd.PojoPack;
-
- import ddd.domain.User;
- import ddd.suit.User_China_Suit;
- import ddd.suit.User_English_Suit;
-
-
-
-
-
- public class UserMain {
- public static void main(String args[]) throws Exception{
-
- User user=new User();
- user.setName_ch("康夫");
- user.setName_en("Nobita");
-
-
- PojoPack<user></user> chuser=new PojoPack<user></user>(user,new User_China_Suit());
- PojoPack<user></user> enuser=new PojoPack<user></user>(user,new User_English_Suit());
- System.out.println("chuser info:"+chuser.executeAction("info",chuser));
- System.out.println("enuser info:"+enuser.executeAction("info",enuser));
-
- System.out.println("\n测试:");
- chuser.executeAction("hello","MewLeo");
- enuser.executeAction("hello","MewLeo");
-
- System.out.println("\n修改再测试:");
- user.setName_ch("爪哇");
- user.setName_en("Java");
- chuser.executeAction("hello","MewLeo");
- enuser.executeAction("hello","MewLeo");
-
- System.out.println("\n未定义方法:");
- chuser.executeAction("noaction");
- }
- }
我们来看看输出结果:
chuser info:User [Nobita] equiped [中国]
enuser info:User [Nobita] equiped [english]
测试:
你好 MewLeo,我是康夫!
Hello MewLeo! I'm Nobita
修改再测试:
你好 MewLeo,我是爪哇!
Hello MewLeo! I'm Java
未定义方法:
[BETA]Making In China @By MewLeo ...
这样使用对象,其实是很大程度的改变了原有的设计思想以及开发方法,把问题往下抛,让对象自管理,至少他能管好自己。
上面的源码和omm.jar在附件中,框架的源码请到我的论坛文件中下载http://groups.google.com/group/mewleo
希望大侠门多指教,像上次那贴被评良好但没几个回复的。。。。我需要大家的帮助才能成功的完成这一想法
还是,先谢谢了,看完挺累的~~休息眼睛。