一个自定义Action中要调用相应的业务逻辑类 , 声明对象的方法 总是 (业务逻辑接口) (对象名) = new (实现业务逻辑的类)(); 这是(业务逻辑接口) 类型 对象 指向 (实现业务逻辑的类) , 但是我就不明白了 , 这样写有什么必要的 , 直接写成
(实现业务逻辑的类) (对象名) = new (实现业务逻辑的类)(); 不就完了吗? 至于那么麻烦吗?
(实现业务逻辑的类) (对象名) = new (实现业务逻辑的类)(); 不就完了吗? 至于那么麻烦吗?
调试欢乐多
比如
如果现在需要LinkedList
List list = new ArrayList();
你只需要改这一行
List list = new LinkedList();如果你当初
ArrayList list = new ArrayList();
那就需要你把所有调用ArrayList方法的地方全部修改
面向OOP软件设计一个准则(去看设计模式),你得先知道接口的作用是什么,为什么sun他专门定义接口,给别的公司去实现,因为他牛B,O(∩_∩)O哈哈~。反正无事做,就聊聊吧。转正题,设计接口,一定保证在近期不能改变,他是一种规范,需要你去按这个规范去实现接口的,如果接口一动,那么实现类就大多时候挨动!所以SUN公司定义的接口也不容易啊。既然你明白了接口是不能乱改的,那么好了,你的Action中要调用对象某个功能,应该是调用接口(相当于SUN公司定义的接口,一个可以说是完美的接口)的方法,业务逻辑相当于别的公司的实现, 当你在以后的工作中或者别的事,你突然想在原来的功能上加上一些东东,如:test()方法,然后在想在action中调用它,按软件设计的原则,这个是不允许的,其实很像现实世界中一样,一个电路产品出来了,你再去内部乱搞,那么,违反了它的规定,原理性已经被改了,电路必将烂掉,到程序,你调用接口的,就想电路的原理性,如果你在ACTION(相当于电路产品)中不按这个接口(原理)去运行,相当你去调用业务实现类的方法,系统将不敢保证正常运行而且很可能的出现问题。不说了,简单的问题 ,等下越说越远啦。如果不明白,你就向楼上所说的,改改代码只该一个地方吧。NNT,再说两句,其实很多人就只能像楼上那样简单的解释,是的没有错,但是这个太不是重点,了解太简单了,可能是看书看的多了,或者百度搜索老搜到这么一个解释的吧 O(∩_∩)O哈哈~。 肯本就不再进行思考,不知道面向对象设计的一些思想。为什么同样的功能,不采用ASP,PHP,而用OO 语言??明白其中的道理吗??为什么ASP,PHP不适合搞大型的项目??
呵呵,不说,再说离题万里了,睡觉了啦。哈哈,明天是年30啦,先祝福你们全家幸福哈,然后牛年快乐哈。
// 定义一个默认业务类型
private I bussiness = null; public static void main(String[] args) {
Test test = new Test();
I i = null; // 原来的需求,调用_default的实例.
test.setBussiness(new _default());
i = test.bussiness;
i.doSomething(); // 当系统需求发生变化,变成调用anotherClass的实例,通过setBussiness()来动态改变业务
test.setBussiness(new anotherClass());
i = test.bussiness;
i.doSomething(); // 系统又变化了,变成调用othersClass的实例,通过setBussiness()来动态改变业务
test.setBussiness(new othersClass());
i = test.bussiness;
i.doSomething();
} public void setBussiness(I Ibussiness) {
this.bussiness = Ibussiness;
}
}
/**
* 所有的业务都实现此接口
*/
interface I {
public void doSomething();
}
/**
* 一个默认的业务
*/
class _default implements I {
public void doSomething() {
System.out.println("I'm from _default");
}
}class anotherClass implements I {
public void doSomething() {
System.out.println("I'm from anotherClass");
}
}class othersClass implements I {
public void doSomething() {
System.out.println("I'm from othersClass");
}
}运行结果:
I'm from _default
I'm from anotherClass
I'm from othersClassoop的一个原则:
针对接口编程,不针对实现编程
package com.test.mytest;public class Test {
// 定义一个默认业务类型
private I bussiness = null; public static void main(String[] args) {
Test test = new Test();
I i = null; // 原来的需求,调用_default的实例.
test.setBussiness(new _default());
i = test.bussiness;
i.doSomething(); // 当系统需求发生变化,变成调用anotherClass的实例,通过setBussiness()来动态改变业务
test.setBussiness(new anotherClass());
i = test.bussiness;
i.doSomething(); // 系统又变化了,变成调用othersClass的实例,通过setBussiness()来动态改变业务
test.setBussiness(new othersClass());
i = test.bussiness;
i.doSomething();
} public void setBussiness(I Ibussiness) {
this.bussiness = Ibussiness;
}
}
/**
* 所有的业务都实现此接口
*/
interface I {
public void doSomething();
}
/**
* 一个默认的业务
*/
class _default implements I {
public void doSomething() {
System.out.println("I'm from _default");
}
}class anotherClass implements I {
public void doSomething() {
System.out.println("I'm from anotherClass");
}
}class othersClass implements I {
public void doSomething() {
System.out.println("I'm from othersClass");
}
}
运行结果:
I'm from _default
I'm from anotherClass
I'm from othersClass
i.doSomething();直接bussiness.doSomething();就行了吧