简单工厂的优缺点:
优:客户端不在负责对象的创建,而把这个责任给了具体地工厂,客户端支负责对象的调用,从而明确各类的职责
缺:简单工厂中使用了静态的方法创建对象,导致无法被继承;工厂类负责对象的创建,这会导致具体产品不断增多;可能客户端对于产品的创建方式还有不同的要求
就要不断地修改工厂类,增加相应的业务逻辑判断,不利于后期得维护
总结:简单工厂适合于创建对象少或简单的情况。
工厂模式:就是一个单一的工厂类,分成多个具体地小工厂,并抽象出一个工厂类,这个工厂类负责定义创建的方式,创建的具体内容有基础他的小工厂实现。
优:明确了各类的职责,增强了系统的可扩展性
缺:需要编写额外的代码,怎加了额外的工作量
抽象工厂模式:如果客户端要创建一些产品结构,而这些产品的结构又属于不同的产品类别,抽象工厂模式中抽象工厂负责定义创建对象的借口,这一系列的创建
工作由实现抽象工厂的具体类来具体完成
优:明确了各类的职责,客户端调用简单
缺:需要编写额外的代码,怎加了额外的工作量
创建者模式:就是将一个复杂的对象的构建和他的表示分离,使得同样得构建过程可以创建不同的表示,而客户端不知到构建的细节。
优:责任明确,各司其职
缺:虽然利用创建者模式可以创建出不同的类型的产品,但如果产品的差异非常大,则需要编写多个创建类才能实现,这是结合工厂模式更好
原型模式:就是通过一个原型对象来表明要创建对象的类型,然后用复制这个原型对象的方法来创建更多同类型的对象
使用时机:当系统需要创建的对象是动态加载的,而且产品具有一定的层次时,需要使用原型模式
在Java中通过赋值语句来创建一个对象,则创建的对象和原来的对象是同一个引用,一个对象改变,则另一个对象也发生改变
而是用clone方法将返回一个对象的拷贝,他不会跟着一个对象的改变而跟着改变
基本类没有问题,非基本类需深度克隆 --这个非基本类实现Cloneable,并重写clone方法
stringButtfer()没有重载clone方法,不能实现深度克隆
优:在原型模式中可以动态的添加产品类,而且对整体结构没有影响。
缺:由于原型模式需要给每一个类都配备一个克隆的方法,这就需要设计师注意了,在已有类的基础上添加clone是比较困难的,增加了代码量
单例模式:就是确保一个类只有一个实例,并且该实例必须自动创建,并向整个系统提供该实例
单例模式分为饿汉式和懒汉式
优:在单例模式中,客户调用类的实例时,只能调用一个公共的接口,这就为整个开发团队提供了共享的概念
缺:实现单例模式的类在实例化后,不能被别的类继承;在分布式系统中,当系统中的多个单例类被复制在多个虚拟机下运行时,在每一个虚拟机下都会创建一个实例对象,这是如果想知道哪个虚拟机运行着那个单例对象是很困难的,而且单例类很难实现序列化