一、简单工厂模式
在实际软件开发过程中,有时需要创建一些来自相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类。在简单工厂模式中,可以根据参数的不同返回不同类的实例。
1.Factory(工厂角色)
2.Product(抽象产品角色)
3.ConcreteProduct(具体产品角色)
缺点:当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,违背了“开闭原则”。
二、工厂方法模式
1.Product(抽象产品)(可以是接口,也可以是抽象类)
2.ConcreteProduct(具体产品)
具体产品实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,它们之间一一对应。
3.Factory(抽象工厂)(可以是接口,也可以是抽象类)
4.ConcreteFactory(具体工厂)
可由用户调用,返回一个具体产品类的实例(接收应用程序调用以创建产品对象)。
工厂方法模式比简单工厂模式的提升:在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将创建工作交给子类去做,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。现在对系统进行修改,不再设计一个工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成。
工厂方法模式与简单工厂模式在结构上的区别:工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
注:实际应用中,具体工厂类的实例化过程不直接使用new关键字来创建对象,而是将具体的类名写入配置文件中,再通过JAVA反射机制读取XML格式的配置文件,根据存储在XML文件中的类名字符串生成对象。
三、抽象工厂模式
http://c.biancheng.net/view/1351.html
参看:Java设计模式:23种设计模式全面解析(超级详细)http://c.biancheng.net/design_pattern/