单例模式 和 反射模式

一,单例模式简介:


1,1简介
单例模式是一种软件设计模式,它限制一个类只能创建一个实例。这意味着无论多少次请求创建该类的实例,始终只会返回同一个实例。

单例模式通常用于需要全局访问点、共享资源或控制特定资源的情况。它提供了一种方便的方式来确保在整个应用程序中只有一个实例存在,并且所有对该实例的访问都通过统一的接口进行。

1,2单例模式的优点

1,独一无二的实例:单例模式确保一个类只有一个实例存在,避免了多次创建相同实例的开销。这对于需要全局访问点或共享资源的情况非常有用。
2,全局访问:由于单例模式只创建一个实例,在整个应用程序中可以方便地通过统一的接口进行访问,避免了频繁传递实例的麻烦。
3,节省资源:单例模式可以节省系统资源,当一个对象需要被频繁创建和销毁时,使用单例模式可以大大提高性能。
4,避免竞态条件:在多线程环境下,单例模式可以解决多个线程同时访问和修改共享资源的竞态条件问题。通过合理的加锁机制,可以确保线程安全性。
5,提供唯一实例的扩展性:尽管单例模式限制了一个类只能有一个实例,但是它仍然允许实例化子类,从而实现了单例模式的扩展性。

总之,单例模式具有简化代码、节省资源、提供全局访问、避免竞态条件等优点,适用于需要全局唯一实例的场景。然而,过度使用单例模式可能会导致代码耦合性增加,不利于测试和扩展,因此在设计中需谨慎使用。

1,3单例模式的缺点

1,单例模式虽然有一些优点,但也存在一些缺点:,
2,难以扩展:由于单例模式只允许一个实例存在,当需要扩展功能时,可能会面临修改单例类的挑战。这可能需要重构现有代码,违反了开闭原则。
3,高耦合性:使用单例模式将类的实现和实例化过程耦合在一起,导致了高耦合性。这使得在修改单例类时,可能会影响到依赖该类的其他部分。
4,对象生命周期管理困难:由于单例模式的实例在整个应用程序的生命周期中存在,当需要释放资源或进行对象销毁时,可能会遇到困难。因为无法直接控制单例类的实例化和销毁过程。
5,难以进行单元测试:由于单例模式具有全局状态,很难对其进行单元测试。因为每个测试用例都必须共享同一个实例,可能会导致测试用例之间的相互影响。
6,潜在的线程安全问题:在多线程环境下,如果没有正确地处理并发访问,可能会出现竞态条件等线程安全问题。需要额外的加锁机制来确保线程安全性,增加了复杂性和性能开销。

因此,在使用单例模式时,需要权衡其优点和缺点,并在设计中慎重考虑。确保合理使用单例模式,避免过度依赖单例实例以及合理处理相关的扩展和线程安全问题。


2,代码编写


1.饿汉式

先写一个类(Singleton1)


 写一个测试类(testSin)

 

2,懒汉式

 

二,反射模式


1,1反射模式简介


反射模式是指在运行时动态地获取和操作对象的信息,而不需要事先知道其具体类型。通过反射,可以在运行时检查类的成员、调用方法、创建实例等操作。
反射模式提供了一种强大的机制来扩展和增强代码的灵活性。它允许在运行时根据需要修改或扩展程序的行为,使得程序更加灵活和可配置。


1,2反射模式的优点

1,动态性:反射机制允许在运行时动态地获取和操作对象的信息,而不需要事先知道其具体类型。这使得程序可以根据运行时的需求来进行灵活的逻辑处理和行为调整。
2,扩展性:通过反射,可以在运行时动态加载类、实例化对象以及调用方法等操作。这使得程序的扩展变得更加简单和灵活,可以通过配置文件或用户输入来决定具体使用哪个类或方法。
3,适应变化:反射模式能够应对程序设计中的变化,使得代码更具适应性和可维护性。当需要添加新的类、方法或字段时,只需要修改配置或调用代码,而不需要修改大量的静态代码。
4,框架和工具的开发:反射在框架和工具的开发中发挥着重要作用。通过反射,可以检查和解析注解、获取类的元数据信息,并在运行时执行相应的逻辑。这为构建通用的框架和工具提供了便利。
5,应用程序的自省:反射还可以用于应用程序的自省(introspection),即程序能够自己检查、分析和描述自身的结构和行为。这为编写代码生成器、调试工具以及自动化测试工具提供了基础。
需要注意的是,反射机制在性能上可能会比直接调用方法或访问对象的成员变量慢。此外,反射也可能破坏封装性和类型安全性,因此在使用反射时应谨慎并遵循最佳实践。

总而言之,反射模式通过提供动态性、扩展性和适应变化的能力,使得程序更加灵活和可配置。它在框架、工具开发以及一些特定需求的场景中发挥着重要作用。


1,3反射模式的缺点


1,性能开销:相比直接调用方法或访问对象的成员变量,通过反射进行操作通常会带来较大的性能开销。反射需要在运行时进行类型检查和动态分析,这会增加额外的时间和资源消耗。,
2,安全性问题:反射可以突破语言层级的访问控制,并访问私有成员、修改私有字段等。这可能导致安全漏洞,使得代码容易受到恶意攻击。
3,复杂性和可读性:使用反射机制的代码通常比直接调用方法或访问成员变量的代码更加复杂和难以理解。反射涉及到类、方法、参数的处理,使得代码逻辑更加难以捉摸和维护。
4,缺乏编译时检查:反射是在运行时进行的,因此编译器无法对反射相关的代码进行静态检查。这增加了代码出错的风险,可能会导致运行时异常。
5,可移植性问题:某些平台或环境下,对于反射的支持可能不完整或存在限制。这可能导致在不同的环境中,反射相关的代码无法正常工作。

因此,在使用反射模式时需要权衡其优点和缺点,并根据具体情况进行判断。在性能要求高、安全性要求严格或者代码可读性重要的场景下,应慎重考虑是否使用反射,并确保合理使用反射,并遵循最佳实践。

2,1代码编写

先写一个实体类(User)

测试-属性类(testUser) 

 测试方法类(SingletonMethod)

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值