Java模式探索:单例模式与工厂模式

需积分: 0 1 下载量 52 浏览量 更新于2024-07-25 收藏 957KB DOC 举报
"《java与模式》阎宏编著,探讨了java编程中的两种重要设计模式——单例模式和工厂模式。单例模式确保类只有一个实例,并提供全局访问点,适用于资源管理器等场景;工厂模式则允许动态创建具体产品类的实例,使消费者角色无需关心产品创建细节。书中通过类图、代码示例和使用案例详细阐述了这两种模式的原理、特征及应用。" 在Java编程中,模式是一种解决常见问题的有效方式,它们能够提升代码的可读性、可维护性和可扩展性。《java与模式》一书深入介绍了20种模式,下面我们将重点讨论其中的单例模式和工厂模式。 单例模式是一种限制类实例化的模式,它的核心在于保证无论何时何地,类只有一个实例存在。在Java中,通常通过以下步骤实现单例: 1. 将构造函数设为私有,防止外界直接实例化。 2. 定义一个静态方法作为获取单例的全局入口,通常命名为`getInstance()`。 3. 使用`synchronized`关键字保证多线程环境下的线程安全,确保在并发情况下不会产生多个实例。 例如: ```java public class Singleton { private static Singleton instance; private Singleton() {} public synchronized static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 单例模式常用于资源管理,如打印机管理器、通信端口管理和日志管理器等,避免资源冲突和浪费。 工厂模式则是一种创建型模式,主要解决对象创建的复杂性。它定义了一个创建对象的接口,但延迟到子类去决定实例化哪个类。工厂模式将对象的创建和使用分离,消费者只关心产品的使用,而不关心具体的生产过程。 简单工厂模式是最基础的形式,通常包含: 1. 一个工厂类,根据输入参数决定创建哪个产品类的实例。 2. 产品类通常具有共同的抽象基类或接口,工厂返回的是抽象类型而非具体类,增加了代码的灵活性。 例如: ```java public abstract class Product { // 共享的接口或抽象类方法 } public class ConcreteProductA extends Product { // 具体产品A的实现 } public class ConcreteProductB extends Product { // 具体产品B的实现 } public class SimpleFactory { public static Product createProduct(String type) { if ("typeA".equals(type)) { return new ConcreteProductA(); } else if ("typeB".equals(type)) { return new ConcreteProductB(); } throw new IllegalArgumentException("Invalid product type"); } } ``` 在工厂模式中,随着产品类的增加,只需要扩展工厂类即可,不影响现有消费者的代码。 这两种模式在实际编程中有着广泛的应用,理解并熟练运用它们,能够帮助开发者写出更加高效、灵活的代码。无论是单例模式保证的全局唯一性,还是工厂模式提供的对象创建抽象,都是软件设计中不可或缺的工具。