Java设计模式:深入解析单例模式

需积分: 9 2 下载量 25 浏览量 更新于2024-08-18 收藏 113KB PPT 举报
"设计模式的学习笔记,包括简单工厂模式和单例模式的介绍" 设计模式是软件工程中经过实践证明有效的解决常见问题的模板,它们提供了一种标准的方式来组织和复用代码,使得代码更加可读、可维护。本文将重点讨论两种设计模式:单例模式和简单工厂模式。 首先,我们来看单例模式。单例模式的主要目的是确保在整个应用程序中,对于特定类的实例化,只有一个全局访问点,也就是只有一个实例存在。这在某些场景下非常有用,例如管理共享资源或控制系统级服务的访问。单例模式通常分为两种实现方式:饿汉式和懒汉式。 1. 饿汉式单例类:这种实现方式在类加载时就完成了实例化,所以线程安全,但是可能会造成资源的浪费,因为即使没有使用到单例,它也会被创建。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } ``` 2. 懒汉式单例类:这种方式延迟了实例化,只有在真正需要时才会创建。然而,如果不进行同步控制,多线程环境下可能产生多个实例,所以需要使用synchronized关键字保证线程安全。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 接下来,我们转向简单工厂模式。简单工厂模式是一种创建型设计模式,它提供一个静态方法来创建对象,而不是让客户端代码直接new对象。这样做的好处是可以将对象的创建逻辑封装起来,使得添加新的产品类型时,无需修改客户端代码。 在给出的例子中,我们有一个`Fruit`接口,代表抽象产品,以及它的两个实现类`Apple`和`Pear`,代表具体产品。`SimpleFactory`类则作为工厂,根据输入的参数(fruitname)返回相应的Fruit对象。当添加新的水果类型时,需要在`SimpleFactory`中增加新的if判断,这违反了开闭原则(对扩展开放,对修改关闭)。 为了解决这个问题,我们可以引入工厂模式,创建一个抽象工厂`FruitFactory`,然后为每种水果创建一个具体的工厂类,如`AppleFactory`和`PearFactory`。这样,添加新产品时,只需要创建新的工厂类,而无需修改已有代码。这使得系统更具扩展性。 总结来说,单例模式和简单工厂模式都是设计模式中的重要成员。单例模式用于保证类的唯一实例,而简单工厂模式则提供了一种更灵活的产品创建方式。理解并恰当运用这些设计模式,能够帮助我们编写出更健壮、可维护的软件系统。