标签:
1.简单工厂模式(simple factory)
简单工厂模式属于创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
1 package SimpleFactory; 2 3 public abstract class Animal { 4 5 public abstract void eat(); 6 7 }
1 package SimpleFactory; 2 3 public class Dog extends Animal{ 4 5 public Dog() { 6 7 } 8 9 @Override 10 public void eat() { 11 System.out.println("狗吃肉"); 12 } 13 14 }
1 package SimpleFactory; 2 3 public class Cat extends Animal{ 4 5 public Cat() { 6 } 7 8 @Override 9 public void eat() { 10 System.out.println("猫吃鱼"); 11 } 12 13 }
1 package SimpleFactory; 2 3 public class AnimalFactory { 4 5 private AnimalFactory() { 6 7 } 8 9 public static Animal createAnimal(String type){ 10 if ("dog".equals(type)){ 11 return new Dog() ; 12 }else if ("cat".equals(type)){ 13 return new Cat() ; 14 } 15 return null; 16 } 17 18 }
1 package SimpleFactory; 2 3 public class Test { 4 5 public Test() { 6 7 } 8 9 public static void main(String[] args) { 10 Animal a = AnimalFactory.createAnimal("dog") ; 11 a.eat(); 12 a = AnimalFactory.createAnimal("cat") ; 13 a.eat(); 14 } 15 16 }
优点:客户端不再负责对象的创建,从而明确了各个类的职责。
缺点:如果有新的产品类增加,要修改工厂类,不利于后期维护,违反了开闭原则。
2.工厂方法模式 Factory Method (创建型模式)
1 package Factory; 2 3 public interface Animal { 4 public void eat(); 5 }
1 package Factory; 2 3 public class Dog implements Animal { 4 5 @Override 6 public void eat() { 7 System.out.println("狗吃肉"); 8 9 } 10 11 }
1 package Factory; 2 3 public class Cat implements Animal { 4 5 @Override 6 public void eat() { 7 System.out.println("猫吃鱼"); 8 } 9 10 }
1 package Factory; 2 3 public interface Factory { 4 public Animal createAnimal(); 5 }
1 package Factory; 2 3 public class CatFactory implements Factory { 4 5 public CatFactory() { 6 // TODO Auto-generated constructor stub 7 } 8 9 @Override 10 public Animal createAnimal() { 11 // TODO Auto-generated method stub 12 return new Cat(); 13 } 14 15 }
1 package Factory; 2 3 public class DogFactory implements Factory { 4 5 public DogFactory() { 6 // TODO Auto-generated constructor stub 7 } 8 9 @Override 10 public Animal createAnimal() { 11 12 return new Dog(); 13 } 14 15 }
1 package Factory; 2 3 public class Test { 4 5 public Test() { 6 // TODO Auto-generated constructor stub 7 } 8 9 public static void main(String[] args) { 10 Factory f = new DogFactory() ; 11 Animal a = f.createAnimal(); 12 a.eat(); 13 14 f = new CatFactory() ; 15 a = f.createAnimal() ; 16 a.eat(); 17 } 18 19 }
优点:如果有新的对象增加,只要增加一个具体的类和具体的工厂类即可,不影响原有的代码,提高了系统的维护性和可扩展性。
缺点:需要额外的代码。
标签:
原文地址:http://www.cnblogs.com/-Buff-/p/5731107.html