请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师可否简单归纳一下代码中的设计模式?

比较小白,我目前看到的有 单例模式?观察者模式?适配器模式?不知道对不对。作为一个新手,很多地方实在是不懂为什么要这么写和这么抽象,还望老师指点一下。

正在回答

1回答

我看你同时问了两个问题,其实两者有关联的;所以我也就放一起来说了。

先来说是你的疑问:

  1. 回调不知道是啥

  2. 设计模式归类

其实说到这两个问题,我们一般会想到的是:接口、回调;而后就是设计模式。几乎所有的设计模式都脱离不了接口和回调。

先来说说单例;这个很简单,一般很少用到我说的接口啊,回调啥的;这是因为这个模式本身没有啥复杂的地方,如果加上了延迟初始化,以及抽象那么就需要用到接口或者回调了;接口用来做职责的定义,回调可以用来做初始化状态的通知。

对于观察者,那就更是太多了;咱们的整个项目其实观察者模式用的非常多,比如Channel的状态回调、数据的发送通知都是观察者的运用。而在这个模式中:接口肯定是有的了,回调也是必须的。

回到我们的问题,回调是什么?课程说了那么多的回调到上层、外层是啥意思。


> 我举个例子:一位老板接到一个任务,但是这个任务他并不打算自己去做,因为这不合身价;所以他交给他的下属;OK。

这里的任务就是一个要做的事情,而他和他的下属可以想成两个独立的类:Boss、Staffer。

Boss 把任务交给了 Staffer;是不是就等于调用了一个 Staffer 的方法,并且传递了某些参数给他。这里的参数就是任务的属性,而调用的方法就是安排Staffer去做某个事情,而Staffer也有着这样的能力去完成。

当然在这个过程中,老板需要知道下属的状态,比如是否做完了啊,是否有遇到问题啥的吧?


但是老板又觉得每次自己去问Staffer是不是不合适啊,老板天天来问,是不是显得不合适啊。更好的是不是应该员工自己传递状态给Boss?

那么OK,这里就涉及到传递状态给Boss,他可以打电话、可以发右键、可以IM、也可以直接去老板办公室告诉Boss。

无论怎样,Staffer肯定有某种方式告诉给Boss状态;而把这个过程抽象一下就是接口StatusCallback。

Staffer调用StatusCallback回送状态给Boss的过程就叫做:回调!!!!

那么课程里的上层、外层、上级就是Boss,就是员工的老板,这是在不同的业务场景下的叫法而已。

我们把上面的过程给实现为代码就是这样:

public class Staffer {
    public interface StatusCallback {
        void onDone(boolean isSucceed);
    }

    public void doWork(int value, StatusCallback callback) {
        // 做某些事情

        // 完成后回调状态给外层
        // 至于外层是Boss还是其他同事都是可以的
        // 在这里只是因为这个任务是Boss指派给他的,所以他回调给Boss
        // 如果是普通员工指派,那就回调给其他员工
        callback.onDone(true);
    }
}
public class Boss implements Staffer.StatusCallback {
    // 老板下面有一个员工
    Staffer staffer = new Staffer();

    void setup() {
        // 任务属性
        int value = 100;

        // 这里交给员工做事情,并且传递任务参数
        // this就是Boss自己,因为Boss自己实现了Staffer.StatusCallback接口
        // Boss 也就具备监听员工状态的能力
        staffer.doWork(value, this);
    }

    @Override
    public void onDone(boolean isSucceed) {
        // 最终员工的行为结果将回调到这里来
    }
}

那么这里:StatusCallback 就是一个接口,同学可能会疑问为啥StatusCallback需要写到Staffer内部,其实写到外层作为独立的类也是可以,只是写到内部更能表现为是Staffer的状态回调。因为在Boss中使用的时候是:

implements Staffer.StatusCallback

Staffer.StatusCallback 写起来明显就能看出是Staffer的状态回调;这是一种字面就能表现意图的技巧。

上面举例的也是设计模式:观察者模式的实现。


在咱们课程中观察者也是用的较多的一种,当然还有门面模式、工厂模式、单例、适配器、组合模式.... 其实有很多的。


一般来说多看,实际使用的时候会有一定的变化,并不一定完全去套用某个设计模式;只需要更好的完成意图就好了。



4 回复 有任何疑惑可以回复我~
  • 提问者 李济邦 #1
    非常感谢老师的解答!
    对于您举得老板和员工的例子,是观察者模式的实现。这里我把员工理解为Subject主题类,把老板作为Observer观察类,然后从员工到老板的回调过程我理解为一个从发布者到观察者的推送(发布)过程,您看这样理解的话对应关系对吗?
    回复 有任何疑惑可以回复我~ 2019-07-08 23:20:44
  • Qiujuer 回复 提问者 李济邦 #2
    嗯嗯,可以这么理解哈。
    回复 有任何疑惑可以回复我~ 2019-07-09 09:04:24
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信