架构师训练营 1 期 -- 第三周总结
开课第三周,如同往期,每一周都收获满满。
这一周主要讲解了集中常见的设计模式。
设计模式是一种可以重复使用的解决方案。这意味着是可以在多个项目中使用,另外设计模式是针对特定问题而设计的,所以在学习设计模式的时候,要理解它的应用场景,解决了什么问题。
设计模式一般包含4部分内容:
模式名称,见名知意。
待解决的问题是什么。
解决方案是什么。
结论,带来了什么好处,有什么弊端。
简单工厂模式:
简单工厂模式是一种创建型设计模式,它的应用场景是,客户端不需要自己创建所需的对象,交给工厂来创建。这样带来的好处是,当我们需要换对象时,客户端代码不需要做修改,满足开闭原则。不过通常简单工厂模式自己无法满足开闭原则,要么工程类不满足,要么客户端类不满足,常见的解决方案是通过配置文件,把需要创建的类写在配置文件中,然后再通过反射区创建类。
单例模式:
单例模式也是一种创建型模式,它保证类的实例只被创建一次。这源于两种需求,一是创建实例需要比较大的开销,使用单例可以提升性能。二是有些应用场景下,实例本身就只有一个,这是功能性需求。
单例模式需要把构造函数设为私有,并通过静态方法获取对象,通常有懒汉和饿汉两种模式。懒汉模式下为了保证线程安全,需要做些同步处理,通常推荐使用饿汉模式。
单例模式中因为只创建了一个实例,所以需要考虑线程安全问题,尽量不在单例中始终状态变量,需要需要使用,需要做线程安全处理。
适配器模式:
适配器模式的使用场景是,当我们需要使用某一个类时,发现他的方法不满足我们已经定义的接口,这是我们可以定义一个适配器类,让适配器类继承我们已经定义的接口,并引用已有的类。
换个说法就是,在软件开发是,我们定义了一组接口进行开发,在实现接口时,发现已经有一个类已经提供了相应的功能,只是没有实现我们定义的接口。我们不可能去改已有类的实现,所以定义一个适配器,同时继承接口和已有类。
适配器模式的实现有两种,第一种是通过继承,适配器继承接口和被适配类。第二种是引用,适配器继承接口,引用被适配类。通常推荐第二种。因为继承会带来一些限制,如性能,继承数目的限制等等。
JUnit中的模板方法模式:
模板方法模式是一种行为模式,它在父类中定义类的行为,各个方法的调用顺序,并且定义抽象方法让子类实现。那么子类只需要实现父类暴露的抽象方法即可。
模板方法在框架应用中比较常见,因为框架一般定义了业务规则,子类只需要实现抽象方法即可,常见的如Servlet的实现以及JUnit。
模板方法有三种实现方式,父类定义抽象方法,让子类实现。父类自己实现抽象方法,子类可以覆盖。对于不需要覆盖的抽象方法,加final关键字。父类定义空方法,子类可实现可不实现。
评论