架构师训练营第二周课程感想 1

发布于: 2020 年 06 月 18 日

这次课程提出了一道题,还是有点意思的。

怎么让一个屋子里面的功能作为一个集合,能都能被外部调用,但是外部调用者调用不同的功能时,不知道又另一种功能的存在?接水的只知道接水的接口,用电的只知道用电的接口,蹭网的只知道蹭网的接口,看小电影的……此处省略50字。

换个角度说一下,如果你想实现这样一组功能:

1、有2套行动方案,一套叫做set/get简称为A,一套给rmi(远程调用接口)调用的rebuild简称为B。

2、需要用一个类去包装他们,但是调用时,A的调用者看着A的文档,无法调用B的;B的调用者看着B的文档,也无法调用A的。就是说,A和B虽然都在这个新的类里面,对外却是功能解耦、相互分离和功能隐藏的。

怎么做?

在Java里面需要使用内部类。这涉及2个知识点:

1、在外部怎么实例化一个内部类?

2、实例化之后,内部类实例之间的可见性怎么样?

Talk is easy. Show me the code.

class Visit{
public void set(){System.out.println("A.set has been executed.");}
public void get(){System.out.println("A.get has been executed.");}
}
class RemoteCall{
public void rebuild(){System.out.println("RemoteCall.rebuild has been executed.");}
}
public class Viewer{
public int a;
//推荐在Viewer类中使用动态方法声明
public class myVisit extends Visit{
/*public void set(){
super.set();
//put your code here if really needed.
}
*/
}
//不推荐在Viewer类里面使用静态方法声明
public static class myRemoteCall extends RemoteCall{
@Override
public void rebuild(){
super.rebuild();
System.out.println("my RemoteCall.rebuild has been executed.");
}
}
public static void main(String args[]){
Viewer demo = new Viewer();
//b对象只能访问到RemoteCall的方法
RemoteCall b = new Viewer.myRemoteCall();
b.rebuild();
//a对象只能访问到Visit的方法
Visit a = demo.new myVisit();
a.set();
//会出错 不能在静态上下文中引用非静态方法
//demo.myB.rebuild();
//System.out.println("b rebuild:"+b.a);
//System.out.println("get:"+a);
}
}

发布于: 2020 年 06 月 18 日 阅读数: 33
用户头像

tuuezzy

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二周课程感想1