智能领域对象设计(设计篇)

 

我们重新审视的以下 JAVAObject 的对象 , 其中包含了两个特殊的方法, equalsclone ,从这两个方法我们可以看出,在面向对象的程序设计中,对象的设计不能紧紧参考其所描述的对象,而不是不可添加其他便于对象活动的行为的。为什么会有这样的结论, equals 的判断两个对象是否相同,这种对象与对象之间相同与否的问题,是只有具备智能的动物或者智能机器人才有的能力做这样的结论,大多数的对象是没有此能力的, clone 就不必说了。故做对象设计不必严格遵守现实,现在大家在写程序的时候经常创建的 javabean ,只有 settergetter ,也是一种无活力对象,只具备传递数据的能力,而且要配合对应的 service 方法才完成工作, service 类就是一个方法集,严格来讲不是面向对象编程。

我们不必在意是否遵守了面向对象的设计方法,能提高生产力的方法,就是好方法。我尝试了一种新的设计方法,看是否可以提高生产力,大家不妨看看。


第一, Object 对象已经具备 equalsclone 了这样的智能方法了,我们不妨再让这个 object 聪明点,给他提供记忆联想功能。接下来的两点详细说明。


第二,很多对象是需要存储的,对象储取能力不需要外部提供,而是继承提供存取能力的对象,这就好像说,你家养的狗狗可以自己到宠物管理机构登记和变更它自己的信息了(听着都轻松),不用那么现实。


第三,世界上任何对象都不是孤立存在,而是相互影响的,存在因果关系的,一种原因能产生什么样的结果,有些是一定的,有的却不一定,对象之间的关联,有些情况是联系紧密的、有些是疏散的,对象具备自己的关系网络。如你目睹一起三车相撞的事故,其中一人的腿的伤势给你印象深刻,以后任何人提起腿受伤,你都会想起那个人,接着想起亲眼目睹那次事故,你还可以想到这起事故具体是如何发生的,即有点到面,有面到体,逐步深入。下面是我的一个对象设计(源代码 https://sourceforge.net/projects/thinery/files/try.zip/download

):

 

public abstract class IObject extends Observable {
	protected static boolean inited = false;
	
	public IObject() {
		.......
		
	}
	
	

	/**
	 * 对象第一此加载的时候初始化所有的监听器,该类的活动如果影响的其他对象
	 * 都可以在监听器完成因果传递,监听器统一配置在一个叫:[子类名称]_lstnr.properties
	 * 的配置文件中,如果对象找不到该文件,会认为没有监听器
	 */
	static Map<String, Observer> observers = new HashMap();

	/**
	 * 把对象自身持久的数据库的方法。子类可以根据类的情况,重写该方法。 如该类是一对一,一对多的,想把关联对象一起存储,就需要重写该方法
	 * 
	 * @throws RuntimeException
	 */
	public abstract void remember();

	/**
	 * 删除此对象对应的数据库记录。 恰如我们忘记一件事物
	 */
	public abstract void forget();

	/**
	 * 用于更新数据库记录,需要更新对象的某一个属性时,用到此方法。 恰如我们需要更新对一件事物的记忆。
	 * 我们每隔三天去看一个正在建设的高楼,那么大脑每次都要更新高楼的高度。
	 * 
	 * @param updateFields
	 *            属性的名称,如果你更改username的值,那么这个参数就应该是username, 注意不是username的值
	 */
	public abstract void updateMemory(String... updateFields);

	/**
	 * 这是一个最自由的方法,该类方法名称意为”联想“,最好的默认实现是查询相关对象。 如:我们通过宝马,联想到奔驰和奥迪。
	 * 如果这是一个事件对象,那么你可以让他想到与这个事件相关的任何东西。
	 * 
	 * @param params
	 *            任何对象
	 * @return
	 */
	public abstract List associate(Object... params);

	/**
	 * 根据主键数据库中获取全部信息
	 * 
	 * @param id
	 * @return
	 */
	public abstract void obtainMe();
	
	protected String getThisName() {
		String name = this.getClass().getName();
		int b = name.lastIndexOf(".");
		String shortName = name.substring(b + 1);
		return shortName;
	}

	private void initOberserver() throws IOException, InstantiationException,
			IllegalAccessException, ClassNotFoundException {
		InputStream inStream = this.getClass().getClassLoader()
				.getResourceAsStream(this.getThisName() + "_lstnr.properties");
		if (inStream != null) {
			Properties temp = new Properties();

			temp.load(inStream);

			Iterator<Entry<Object, Object>> iter = temp.entrySet().iterator();
			while (iter.hasNext()) {
				Entry e = iter.next();
				String key = (String) e.getKey();
				String value = (String) e.getValue();
				Observer obsr = (Observer) Class.forName(value).newInstance();
				observers.put(key, obsr);
			}
		}
	}
}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值