普通工厂:厂商根据客户要求去生产,客户去工厂里(表示要实例化工程类)告诉厂商要什么;
多工厂:厂商在工厂里提供模版,客户自己根据需要自己去工厂里使用模板;
静态工厂:厂商直接将模板摆到商店,客户直接使用模板即可(不需要实例化工厂类);
 普通工厂模式
 描述
建立一个工厂类,对实现了同一接口的提供一个工厂方法创建对象;
客户告诉厂商想要什么,厂商根据客户要求去生产;
 问题
类的创建依赖工厂类,如果想要拓展程序,必须对工厂类进行修改,这就违背了闭包原则;
 示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 
 | interface Animal {public void say();
 }
 
 class Dog implements Animal {
 @Override
 public void say(){
 Test.printMsg("Dog");
 }
 }
 class Cat implements Animal {
 @Override
 public void say(){
 Test.printMsg("Cat");
 }
 }
 
 class MainClass {
 public Animal mainclass(String type){
 if (type.equals("dog")) {
 return new Dog();
 }else if (type.equals("cat")) {
 return new Cat();
 } else {
 Test.printMsg("Error type");
 return null;
 }
 }
 }
 public class Test {
 public static void printMsg(String msg){
 System.out.println(msg);
 }
 public static void main(String[] args){
 MainClass maincls =  new MainClass();
 Animal dog = maincls.mainclass("dog");
 dog.say();
 
 Animal cat = maincls.mainclass("cat");
 cat.say();
 }
 }
 
 | 
 多工厂模式
 描述
对普通工厂方法模式的改进,提供多个工厂方法,分别创建对象
 示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 
 | interface Animal {
 public void say();
 }
 
 class Dog implements Animal {
 @Override
 public void say(){
 Test.printMsg("Dog");
 }
 }
 class Cat implements Animal {
 @Override
 public void say(){
 Test.printMsg("Cat");
 }
 }
 
 class MainClass {
 public Animal dogClass(){
 return new Dog();
 }
 public Animal catClass(){
 return new Cat();
 }
 }
 public class Test {
 public static void printMsg(String msg){
 System.out.println(msg);
 }
 public static void main(String[] args){
 MainClass maincls =  new MainClass();
 Animal dog = maincls.dogClass();
 dog.say();
 Animal cat = maincls.catClass();
 cat.say();
 }
 }
 
 | 
 静态工厂模式
 描述
将多个工厂模式里的工厂方法置为静态,不需创建实例即可调用
 示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 
 | interface Animal {
 public void say();
 }
 
 class Dog implements Animal {
 @Override
 public void say(){
 Test.printMsg("Dog");
 }
 }
 class Cat implements Animal {
 @Override
 public void say(){
 Test.printMsg("Cat");
 }
 }
 
 class MainClass {
 public static Animal dogClass(){
 return new Dog();
 }
 public static Animal catClass(){
 return new Cat();
 }
 }
 public class Test {
 public static void printMsg(String msg){
 System.out.println(msg);
 }
 public static void main(String[] args){
 Animal dog = MainClass.dogClass();
 dog.say();
 Animal cat = MainClass.catClass();
 cat.say();
 }
 }
 
 |