单例模式,代理模式,装饰器模式,简单工厂模式

1.spring的模式,尤其是单例模式,都有哪些应用场景,优缺点有哪些;
(单例模式被提问,有想要引出线程安全,内存模型,类加载机制等一些比较核心的知识)
单例模式:保证类只有一个实例,并且单例类必须自己创建自己的唯一的实例,然后提供给其他对象进行使用;应用场景有:日志应用,多线程的线程池,I/O与数据库的连接池等等;
创建单例模式有:懒汉模式(类加载时不创建实例,要使用的时候才创建),饿汉模式;
要保证线程安全性:双检锁(double checked locking),静态内部类;
要保证防止反序列化创建对象:将这个类设置为枚举;
优点:内存中只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例;避免了对资源的多重占用;
缺点:没有接口,不能继承(构造函数是私有的),只关心自己的内部逻辑;

2.简单工厂模式:又叫静态工厂,属于类创建型模式,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义了一个类来负责创建其他类的实例,被创建的类通常具有共同的父类;
优点:一个调用者想创建一个对象,只需要知道其名称就可以了;扩展性高,如果想增加一个产品,只要扩展一个工厂就行;屏蔽了产品的具体实现;
缺点:每次增加一个产品,都要具体增加一个具体类和对象实现工厂,让系统中类的个数成倍增加;
使用场景:日志记录器,记录可以记录到本地硬盘,系统事件,远程服务器,用户可以选择记录日志到什么地方;数据库访问,当用户不知道系统采用哪一类数据库,以及数据库可能有变化时;
(工厂模式还包括了工厂方法模式,和抽象工厂模式(其他工厂的工厂,超级工厂))

3.代理模式:一个类代表另一个类的功能,创建具有现有对象的对象,以便向外界提供功能接口。意图就是为其他对象提供一种代理以控制对这个对象的访问(用户一般无法直接访问对象,而是通过一个代理类来访问对象)。
使用场景:代理软件间接实现访问谷歌;代理类间接实现远程调用服务器对象;
安全代理(用来控制真实对象访问时的权限),虚拟代理(加载Html文件的时候,先显示文字,暂时未被打开的图片,是被虚拟代理替代了),防火墙代理都是它的使用场景;
和装饰器模式的区别:装饰器模式是为了增强功能,而代理模式是为了加以控制;
优点:协调调用者和被调用者,一定程度上降低了系统的耦合度;代理对象起到了中介的作用,起到了保护目标对象的作用;
缺点:有些类型的代理模式可能会造成请求的处理速度变慢;静态代理在委托类变多的时候会显得非常臃肿,不方便阅读和使用;

4.装饰器模式:允许向一个对象添加新的功能,同时又不改变其结构,相比于生成子类更加的灵活(使用继承的话将父类中的很多不想要用的功能继承过来了,子类会臃肿)
实现方法:装饰类和被装饰类去实现同一个接口(代理模式时,代理类和被代理类也是要实现同一个接口),不同所在是,装饰器模式专注于扩展一个类的功能,而代理模式专注于强调对对象的访问控制,借助对象的某一功能;在实现的时候,被装饰的对象是作为参数传入装饰类的构造函数中去,而在代理模式中,被代理的对象一般在代理类的构造函数中自动创建。

posted @ 2021-09-14 12:53  一颗小红星  阅读(176)  评论(0)    收藏  举报