架构师训练营 - Lesson Week 3

用户头像
brave heart
关注
发布于: 2020 年 06 月 25 日
架构师训练营 - Lesson Week 3

一、前言



这部分主要是学习设计模式,也是趁这个机会,把设计模式再学习一下。

二、设计模式



1、单例模式



  • 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

  • 减少内存开支、减少系统的性能开销、避免对资源的多重占用

  • 没有接口,扩展很难、对测试不利、与单一职责原则有冲突

  • 共享访问点或共享数据、访问IO和数据库、大量静态常量和静态方法

  • 有上限的多例模式

  • 线程不安全的单例,可能在内存中出现多个实例的情况,其原因是:假设一个线程A执行到singleton = newSingleton(),但还没有获得对象(对象初始化是需要时间的),第二个线程B也在执行,执行到(singleton == null)判断,那么线程B获得判断条件也是为真,于是继续运行下去,线程A获得了一个对象,线程B也获得了一个对象,在内存中就出现两个对象。

  • Java中,对象默认是不可以被复制的,若实现了Cloneable接口,并实现了clone方法,则可以直接通过对象复制方式创建一个新对象,对象复制是不用调用类的构造函数,因此即使是私有的构造函数,对象仍然可以被复制。在一般情况下,类复制的情况不需要考虑,很少会出现一个单例类会主动要求被复制的情况,解决该问题的最好方法就是单例类不要实现Cloneable接口。

public class Singleton {
private static final Singleton singleton = new Singleton();
//限制产生多个对象
private Singleton() {}
//通过该方法获得实例对象
private Singleton getInstance() {
return singleton;
}
//类中其他方法,尽量是static
private static void doSomething() {
}
}



2、组合模式



  • 将对象组合成树形结构以表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性

  • 树枝和叶子实现统一接口,树枝内部组合该接口,并且含有内部属性List,里面放 Component

  • 高层模块调用简单、节点自由增加

  • 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则

三、其他



  • 架构师要通过自己代码,让代码落地,如何让别人按照你的规范来写代码,让设计落地,日常工作通过代码,让架构落地

  • 开源框架,查看源码,早期二三百行,可以看,因为核心的代码

  • 高效学习框架的方式就是去践行,试着写一个框架

  • 难的可以解决,复杂的是乱没有思路

  • 最厉害的不是解决问题的人,而是发现问题的人

  • 学习设计模式要放到场景中去,不要为了学而学

  • 书读越多,传递有效信息越少

  • 手写代码



四、相关书籍



《设计模式之禅》



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

brave heart

关注

唯一不变的是变化本身。 2018.04.17 加入

🗡 她只唱只想这首止战之殇。

评论

发布
暂无评论
架构师训练营 - Lesson Week 3