public class A { public void t1(){ } public void t2(){ } } //B类想同时拥有: t1(),t2(),t3(),t4(),t5(),t6()的功能 //相比B类更好的设计方式: 优先对象组合而非继承 public class B extends A{ public void t3(){ } public void t4(){ } } public class B2 { // 组合方式1--省内存,速度慢 public void t1() { new A().t1(); } public void t2() { new A().t2(); } public void t3() { } public void t4() { } //组合方式2--c的生命周期长(占用内存时间长),但速度快 private C c=new C(); public void t5(){ c.t5(); } public void t6(){ c.t6(); } } public class C { public void t5(){ } public void t6(){ } }
public interface Api { public void t1(); } public class Impl1 implements Api{ @Override public void t1() { System.out.println("1111111111111111"); } } public class Impl2 implements Api{ @Override public void t1() { System.out.println("2222222222222"); } } public class Client { public static void main(String[] args) throws Exception { Class c=Class.forName("cn.hncu.design.two.Impl2"); Api api=(Api) c.newInstance(); api.t1(); } }
//同时与模块Client1,Client2交互的通用接口,,,这种设计不好,建议采用分成两个专用接口来做 public interface Api { //模块Client1访问的方法 public abstract void t1(); public abstract void t2(); //模块Client2访问的方法 public abstract void t3(); public abstract void t4(); } //与Client1模块交互的专用接口 public interface Api1 { public abstract void t1(); public abstract void t2(); } //与Client2模块交互的专用接口 public interface Api2 { public abstract void t3(); public abstract void t4(); } public class Client1 { public static void main(String[] args) { Api api = null;// 实现项目中,这里用类反射或工厂类创建出一个实现类对象 api.t1(); api.t2(); api.t3(); api.t4(); // 专用接口的调用方式 Api1 aapi = null; aapi.t1(); aapi.t2(); Api2 aapi2 = null; aapi2.t3(); aapi2.t4(); } } public class B { /* public void t(A a){ System.out.println( a.t1() ); } */ //在依赖不是很严重的地方,可以考虑剪断依赖链---自己实现依赖对方获得的功能 public String t1(){ return "111111111"; } }
public class A { public String t1(){ return "1111111111111"; } } public class B { /* public void t(A a){ System.out.println( a.t1() ); } */ //在依赖不是很严重的地方,可以考虑剪断依赖链---自己实现依赖对方获得的功能 public String t1(){ return "111111111"; } }