packagecom.tan.principle.composite_reuse;/*
需求:
假设现在有A类,A类中有method1()、method2(),B类想要去使用A类中的method1()
传统写法
*/publicclassCompositeReuse{publicstaticvoidmain(String[] args){B b =newB();
b.method1();}}classA{publicvoidmethod1(){System.out.println("俺是A类中的method1");}publicvoidmethod2(){System.out.println("俺是A类中的method2");}}classBextendsA{}
packagecom.tan.principle.composite_reuse.improve1;/*
需求:
假设现在有A类,A类中有method1()、method2(),B类想要去使用A类中的method1()
方案一
*/publicclassCompositeReuse{publicstaticvoidmain(String[] args){A a =newA();B b =newB();
b.useA(a);}}classA{publicvoidmethod1(){System.out.println("俺是A类中的method1");}publicvoidmethod2(){System.out.println("俺是A类中的method2");}}classB{publicvoiduseA(A a){
a.method1();}}
packagecom.tan.principle.composite_reuse.improve2;/*
需求:
假设现在有A类,A类中有method1()、method2(),B类想要去使用A类中的method1()
方案二
*/publicclassCompositeReuse{publicstaticvoidmain(String[] args){A a =newA();B b =newB();
b.setA(a);
b.a.method1();}}classA{publicvoidmethod1(){System.out.println("俺是A类中的method1");}publicvoidmethod2(){System.out.println("俺是A类中的method2");}}classB{publicA a;publicvoidsetA(A a){this.a = a;}}
packagecom.tan.principle.composite_reuse.improve3;/*
需求:
假设现在有A类,A类中有method1()、method2(),B类想要去使用A类中的method1()
方案三
*/publicclassCompositeReuse{publicstaticvoidmain(String[] args){A a =newA();B b =newB();
b.a.method1();}}classA{publicvoidmethod1(){System.out.println("俺是A类中的method1");}publicvoidmethod2(){System.out.println("俺是A类中的method2");}}classB{publicA a =newA();}