java设计思想_类反射


java设计思想_System_02

java设计思想_System_03

java设计思想_类反射_04

java设计思想_类反射_05

java设计思想_类反射_06

java设计思想_System_07

java设计思想_类反射_08

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";
}
}