首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

应当传入父类的地方却传入的父类,这个设计模式叫什么名字

2012-10-06 
应该传入父类的地方却传入的父类,这个设计模式叫什么名字?public class T4 {/** * @param args */public s

应该传入父类的地方却传入的父类,这个设计模式叫什么名字?

public class T4 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubA a = getChild();B b = new ChildB();b.test(a);//test方法需要的是子类,但是这里传入的是父类;}static A getChild(){ChildA a = new ChildA();a.setType("1");a.setOther("2");return a;}}interface A{public String getType();}class ChildA implements A{String type=null;String other=null;public String getOther() {return other;}public void setOther(String other) {this.other = other;}@Overridepublic String getType() {// TODO Auto-generated method stubreturn type;}public void setType(String type){this.type = type;}}interface B<T>{void test(T a);}class ChildB implements B<ChildA>{@Overridepublic void test(ChildA a) {System.out.println(a.getOther());}}

??? 以上代码在main方法中的第三行代码,传入了一个父类参数,但是ChildB定义的是其子类,根据里氏代换原则,只有传入父类的地方,可以传入子类,但是在传入子类的地方传入父类却是违背里氏代换原则的,通常情况下是会报错的;但是这里实现了一个B接口后,这样的的实现却是可以的,并且还可以将值打印出来,这是为什么呢?

??? 这是什么样的设计模式,名称叫什么呢,一下子却想不起来了!

============================================

??? 后来咨询了相关的同事后,觉得这样写有这样写的好处,因为这里涉及到多个不同业务的处理,而不同的业务之间可能有不同的属性,如果是直接通过传入接口作为参数,那那个时候不同的业务处理起来就会受限制,通过采取这样继承泛型的接口,可以保证传入任何类型的字类都是可以的,从而满足不同的业务需求;但是这里也提到一点,这样的可读性并不好,因为这给后期其它的开发人员的维护带来了理解上的困难。

热点排行