作业二:读书笔记----软件设计原则、设计模式

这个作业属于哪个课程 班级传送门
这个作业要求在哪里 作业要求传送门
这个作业的目标 阅读书籍,学习设计模式与设计原则思想

书籍

  • 图书名:《Android源码设计模式解析与实战》
  • 作者:何红辉、关爱民
  • 出版社:人民出版社

书籍内容

书籍的主要内容是讲解面向对象的六大原则23种设计模式2种android开发架构模式,并结合android具体源码以及相关代码demo讲解。

六大设计原则

  • 单一职责:每个函数尽可能单一的职责
  • 开闭原则:面向继承开放,面向修改关闭
  • 里氏替换:子类可存在的地方,父类也可以存在
  • 依赖倒置:依赖抽象而不是具体
  • 接口隔离:对象不依赖他不需要的接口
  • 迪米特:一个类对调用的类知道的最少

代码遵循设计原则可以使得我们的代码有更强的拓展性、强壮性。

23种设计模式

内容比较多,选择常见的几种设计模式来分析。

  • 单例模式

    保证一个类全局只有一个实例,无法被实例化第二次。好处是对象的状态全局统一,可以通过单例来实现一些全局服务操作、数据托管等。

  • 观察者模式

    当我们想要观察一个对象的变化时,可以通过不断轮询去查看是否发生变化。观察者改变思路,在数据发生变化的时候通知观察者,提高了效率。

  • 装饰模式

    当我们想要拓展一个类的功能时,可以通过继承,但继承是静态修改。装饰者模式可以实现动态增加一个对象的功能,通过给对象增加一个壳来拓展功能,比继承更加灵活。

  • 责任链模式

    把一个完整的工作拆分成多个不同职责,连成一条链,就像流水线一样。每个环节负责不同的内容,职责分明,更容易维护代码和开发。

单例模式

单例模式可以认为是最简单的一种设计模式,只需要保证全局单例即可。可以通过双重检锁或者静态变量的方式来保证全局对象唯一。下面使用双重检锁来实现:

public class SingleInstance {

    private volatile static SingleInstance instance;

    private SingleInstance(){}

    public static SingleInstance getInstance(){
        if (instance==null){
            synchronized(SingleInstance.class){
                if (instance==null){
                    instance = new SingleInstance();
                }
            }
        }
        return instance;
    }
}

观察者模式

观察者模式可以很好地解决轮询问题,改变主动权到数据手中。例如当前线程A需要在另一个线程B结束后执行某个逻辑,那么直接的做法就是当前线程不断去询问另一个线程是否执行结束;而观察者模式可以让线程B结束后主动通知线程A执行逻辑。

观察者的优点是:

  • 开闭原则。 你无需修改发布者代码就能引入新的订阅者类。
  • 你可以在运行时建立对象之间的联系。

观察者模式结构如下:

责任链模式

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

将这些处理者连成一条链。 链上的每个处理者都有一个成员变量来保存对于下一处理者的引用。 除了处理请求外, 处理者还负责沿着链传递请求。 请求会在链上移动, 直至所有处理者都有机会对其进行处理。

最重要的是: 处理者可以决定不再沿着链传递请求, 这可高效地取消所有后续处理步骤。

结构如下:

装饰者模式

装饰模式是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。

当你需要更改一个对象的行为时, 第一个跳入脑海的想法就是扩展它所属的类。 但是, 你不能忽视继承可能引发的几个严重问题。

继承是静态的。 你无法在运行时更改已有对象的行为, 只能使用由不同子类创建的对象来替代当前的整个对象。

子类只能有一个父类。 大部分编程语言不允许一个类同时继承多个类的行为。

其中一种方法是用聚合或组合 , 而不是继承。 两者的工作方式几乎一模一样: 一个对象包含指向另一个对象的引用, 并将部分工作委派给引用对象; 继承中的对象则继承了父类的行为, 它们自己能够完成这些工作。

你可以使用这个新方法来轻松替换各种连接的 “小帮手” 对象, 从而能在运行时改变容器的行为。 一个对象可以使用多个类的行为, 包含多个指向其他对象的引用, 并将各种工作委派给引用对象。

结构模式如下:

思考

设计模式是软件设计中常见问题的典型解决方案。 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。选择合适的设计模式可以让自己的开发事倍功半。

我自己是专攻于移动端开发,其中感受最深的是单例模式、观察者模式。

单例模式可以作为全局的处理中心,所有的界面可以获取到该对象并得到服务,极大地简化了逻辑。

而观察者模式可以让数据变化的时候自动反应到界面上,不需要手动把数据设置到界面,代码解耦分离。

但设计模式必须根据具体的场景来结合使用,不然会适得其反。

设计原则其中一个重大的方面就是面向抽象,而不是面向具体。这样的好处是我们可以随意修改具体的代码而不需要去修改调用方,对于调用方是无感知的。极大提高代码的可维护性。在实际的开发中,我也会抽象出合理的接口来提高代码的可维护性。

posted @ 2021-03-16 21:19  一只修仙的猿  阅读(75)  评论(0)    收藏  举报