如何保证一个类只有一个实例并且这个实例易于被访问?
(1)全局变量:可以确保对象随时都可以被访问,但不能防止创建多个对象
(2) 让类自身负责创建和保存它的唯一实例,并保证不能创建其他实例,它还提供一个访问该实例的方法
单例模式的定义
单例模式:确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。
要点: 某个类只能有一个实例 必须自行创建这个实例 必须自行向整个系统提供这个实例
工厂方法模式的定义
工厂方法模式:定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。
工厂方法模式的结构
工厂方法模式包含以下4个角色:
1.Product(抽象产品)
2.ConcreteProduct(具体产品)
3.Factory(抽象工厂)
4.ConcreteFactory(具体工厂)
模式优点
工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
在系统中加入新产品时,完全符合开闭原则
模式缺点
系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
增加了系统的抽象性和理解难度
在简单工厂模式中用于创建实例的方法通常是静态(static)方法,因此又被称为静态工厂方法(Static Factory Method)模式
要点:如果需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无须知道其创建细节
工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
客户端只知道传入工厂类的参数,对于如何创建对象并不关心