单例模式,工厂方法模式,抽象工厂模式,模板方法模式

本文深入解析四种常见的设计模式:单例模式保证类只有一个实例,适合内存优化和共享访问点;工厂方法模式提供创建对象的接口,允许子类决定实例化哪个类;抽象工厂模式用于创建相关对象族,无需指定具体类;模板方法模式定义算法框架,子类可自定义特定步骤。这些模式在软件设计中起到关键作用,如灵活性、封装性和可扩展性。
摘要由CSDN通过智能技术生成

单例模式

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

代码实现

public class Singleton {
   
    
    //private限定初始化,保证自动初始化且只初始化一个对象
    private static final Singleton singleton=new Singleton();
    
    //私有化构造函数,防止创建多个变量
    private Singleton() {
   

    }
    //提供给外部访问这个对象
    public static  Singleton getSingleton(){
   
        return singleton;
    }
}
 //通过get方法获取同一个对象
    Singleton singleton=Singleton.getSingleton();

优点

  1. 单例模式只在内存中创建一份对象,减少内存开支,特别适用于对象频繁创建和销毁
  2. 可以永久驻留内存,适用于对象产生时比较消耗资源的对象
  3. 避免对资源的多重占用,防止对同一个资源文件同时修改的操作

缺点

  1. 单例模式没有接口,拓展比较困难
  2. 单例模式要写完才能进行单元测试,没有接口也不能使用mock
  3. 单例模式与单一职责原则有冲突,单例模式考虑的是内存优化,并不是为了实现目标。

使用场景

  1. 要求生成唯一序列号的环境
  2. 项目中需要一个共享访问点或共享数据
  3. 创建对象需要消耗资源过多时
  4. 需要创建大量工具类常量的时候

拓展,一个类只产生2-3个对象(或固定多个对象):有上限的单例模式

例:一个班只有固定的三个老师,学生随机找老师送教师节礼物,构建一个只有固定三个对象的老师类

public class Teacher {
   
    //最多产生的实例数量
    private static final int MAX_TEACHER=3;
    //定义一个列表去存放老师的私有属性,比如名字
    private static ArrayList<String> namelist=new ArrayList<>();
    //定义一个列表去存放老师的对象实例
    private static ArrayList<Teacher> teacherList= new ArrayList<>()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值