单例模式和工厂方法可以说是在软件设计模式中目前用得比较多的,目前在公司做的项目也经常会接触到,他们都实现了类的创建封装,让代码维护变得更加简单。
首先说单例模式,单例模式可以保证整个系统中一个类只有一个实例,而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源,如果只希望在系统中某个类的对象有且只能存在一个,单例模式是最好的解决方案。

对于某些系统来说,有些类只有一个实例很重要,如最常见的数据库连接配置对象。它在整个系统中只需要一个就足够了,多了就会产生很多不必要的开销,造成资源浪费。

工厂方法则非常复杂,这里只说比较简单的简单工厂模式,而感兴趣的读者可以去看看工厂方法模式。从设计模式的类型上来说,单例模式和简单工厂模式都是属于创建型模式,简单工厂模式又叫做静态工厂方法,是由一个工厂对象决定创建出哪一种产品类的实例。

简单工厂模式一般会分三个角色,第一个工厂(Creator)角色,它是负责实现创建所有实例(产品)的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。第二个抽象产品(Product)角色,为所有不同类型的产品,定义一种借口。第三个实例产品(Concrete Product)角色,是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

单例模式和工厂方法都为实例对象的创建提供了封装特性,有利于整个软件体系结构的优化。但是这些模式亦不能乱用,比如单例模式,在一个系统中如果需要有多个实例的时候,使用单例模式甚至会出现功能错误。所以在使用设计模式的时候我们需要多方面考虑,让模式为我们带来真正意义上的优化。

简单工厂图示