1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

设计模式详解——复合模式

前言

复合模式是指在一个解决方案中结合两个或多个模式,以解决一般或重发发生的问题。由于设计模式比较多,所以复合出来的复合模式就更多了,这里关于复合模式就不再展开分析了,下面我们来通过一种非常普遍的复合模式,来简单演示下复合模式的通常应用。

MVC模式

关于MVC想必各位小伙伴绝对不陌生,凡是学过java web相关内容的小伙伴,肯定都学过最基本的Model 2MVC模式,也就是我们今天要分享的内容,下面是MVC模式的模型图:

其中Model模型层就是我们存取的数据对象,View试图层表示需要呈现的试图内容,Controller控制器主要是用来操作模型和试图的。

要点

  • MVC是复合模式,结合了观察者模式、策略模式和组合模式
  • 模型使用观察者模式,以便观察者更新,同时保持两者之间的解耦
  • 控制器是试图的策略,试图可以使用不同的控制器实现,得到不同的行为
  • 视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板、框架和按钮等
  • 这些模式携手合作,把MVC模型的三次解耦,这样既可以保持设计干净,又有弹性
  • 适配器模式用来将新的模型适配成已有的试图和控制器
  • Model 2MVCWeb上的应用
  • Mdodel 2中,控制器实现成了Servlet,而JSP/Html是视图层

示例

模型层

模型层通常采用观察者模式,更准确地说是它和视图层共同组成观察者没事,当数据数据模型发生变化时(被观察对象),可以实时将结果反馈给视图层(观察者)。

使用观察者模式,可以让模型完全独立于视图和控制器,同一个模型可以使用不同的视图,甚至可以使用多种视图。

这里我们的代码演示的是最基本的数据模型,也就是我们web开发中的bean

public class StudentModel {
    private String rollNo;
    private String name;
    public String getRollNo() {
        return rollNo;
    }
    public void setRollNo(String rollNo) {
        this.rollNo = rollNo;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
视图层

视图层在某些场景下,是可能需要同时显示多种数据模型和数据展示组件的,所以通常情况下视图会是一个或多个组件构成,所以视图层的实现是需要用到组合设计模式的。

这里我们也仅仅演示一种最简单的视图模型,它主要用来打印模型的基本信息:

public class StudentView {
    public void printStudentDetails(String studentName, String studentRollNo){
        System.out.println("Student: ");
        System.out.println("Name: " + studentName);
        System.out.println("Roll No: " + studentRollNo);
    }
}
控制层

视图层和控制器实现了经典的策略模式,视图是一个对象,可以被调整使用不同的策略,而控制器提供了策略。视图只关心系统中可视的部分,对于任何逻辑行为,都委托给控制器处理。

使用策略模式也可以让视图和模型之间的关系解耦,因为控制器负责和模型交互来传递用户的请求,对于实际请求数如何处理的,视图并不需要关心。

这里的控制层也很简单,由控制层直接操作视图和模型,然后完成相关操作:

public class StudentController {
    private StudentModel model;
    private StudentView view;

    public StudentController(StudentModel model, StudentView view){
        this.model = model;
        this.view = view;
    }

    public void setStudentName(String name){
        model.setName(name);
    }

    public String getStudentName(){
        return model.getName();
    }

    public void setStudentRollNo(String rollNo){
        model.setRollNo(rollNo);
    }

    public String getStudentRollNo(){
        return model.getRollNo();
    }

    public void updateView(){
        view.printStudentDetails(model.getName(), model.getRollNo());
    }
}
测试代码

首先分别创建模型和视图的示例,然后由控制器统一调度处理,最后视图根据模型结果将数据予以展示:

	@Test
    public void testMVC() {

        //从数据库获取学生记录
        StudentModel model = retrieveStudentFromDatabase();

        //创建一个视图:把学生详细信息输出到控制台
        StudentView view = new StudentView();

        StudentController controller = new StudentController(model, view);

        controller.updateView();

        //更新模型数据
        controller.setStudentName("syske");

        controller.updateView();
    }


    private static StudentModel retrieveStudentFromDatabase() {
        StudentModel student = new StudentModel();
        student.setName("云中志");
        student.setRollNo("10");
        return student;
    }

由于MVC模式相比其他模式,我们都比较熟悉,所以这里就不再过多说明了。

总结

今天其实在MVC模式的示例中有点偷懒了,这一点我自己也明显地感觉到了,设计模式确实学起来挺枯燥的,所以我在分析相关设计模式的时候,基本上都是按部就班的调调,内容上也是马马虎虎,整个过程根本就没有我分享demo时的那种兴奋感,但是退一步讲,关于本次的设计模式分享,我觉得自己还是有收获的:

首先我自己对设计模式有了整体的认知,在此之前,很多设计模式可能只知道它的名字,关于它的设计原理和基本思想,根本就不了解,但是学了这么几天之后,我觉得我已经发现了我们常用框架中的设计模式,同时也觉得要不断加强设计模式的实践,希望能真正将这些东西应用起来,这样坚持才有意义……

最后,用一句话结束今天的内容:坚持最大的意义就是坚持,坚持最大的动力也是坚持,愿你的愿望终能实现,愿你想去的地方终能到达,每一步都是起点,每一步都不是终点……大家共勉!感谢!晚安咯!

posted @ 2021-10-23 22:31  云中志  阅读(264)  评论(0编辑  收藏  举报