设计模式之简单工厂
2017-04-14 10:10
411 查看
如果要定义一个动物类,然后动物类中需要声明动物的say方法,那有几种动物该肿么办呢?正常情况下我们会这么做(起码我一开始也是这么做了很久):
可是这样写,我们今天要加个snake,明天又加一个bird,岂不是需要不停的在这个类中添加代码?这样的话,这个类会越来越臃肿,对吧?
然后呢,前辈们就想了一个办法:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法
代码如下:
动物类:
猫类:
狗类:
实现类:
这样搞感觉还是不太好,因为我在实现的时候还要判断才能拿到,用反射优化实现类:
Ok,Done!
public class Animal { public String name; public void say(){ if(this.name.equals("dog")){ System.out.print("汪汪汪!"); }else if(this.name.equals("cat")){ System.out.print("喵喵喵!"); }else if(this.name.equals("fish")){ System.out.print("...."); } } }
可是这样写,我们今天要加个snake,明天又加一个bird,岂不是需要不停的在这个类中添加代码?这样的话,这个类会越来越臃肿,对吧?
然后呢,前辈们就想了一个办法:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法
代码如下:
动物类:
abstract class Animal { public void say(){ } }
猫类:
public class Cat extends Animal{ public void say(){ System.out.print("miao!"); } }
狗类:
public class Dog extends Animal{ public void say(){ System.out.print("wang!"); } }
实现类:
public class testMain2 { public static void main(String[] args) { testMain2 t = new testMain2(); Animal animal; animal = t.getAnimal("Cat"); animal.say(); } public Animal getAnimal(String type){ Animal animal=null; if(type.equals("Cat")){ animal = new Cat(); }else if(type.equals("Dog")){ animal = new Dog(); } return animal; } }
这样搞感觉还是不太好,因为我在实现的时候还要判断才能拿到,用反射优化实现类:
public class testMain2 { public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException { testMain2 t = new testMain2(); Animal animal = t.getAnimal(Dog.class); animal.say(); } public Animal getAnimal(Class c) throws ClassNotFoundException, IllegalAccessException, InstantiationException { Animal animal= (Animal) Class.forName(c.getName()).newInstance(); return animal; } }
Ok,Done!
相关文章推荐
- 设计模式学习笔记(四):简单工厂模式
- 设计模式(C#版)--简单工厂模式
- C++设计模式从0进击-1-简单(静态)工厂模式
- 设计模式----简单工厂
- 设计模式:工厂方法模式(C++)【简单工厂进行升级】
- 设计模式-创建者模式-简单工厂模式
- 设计模式学习--简单工厂模式
- 简单工厂、工厂方法和抽象工厂设计模式
- 设计模式之简单工厂方法模式和工厂方法模式
- 设计模式-简单工厂、工厂模式(转载)
- 设计模式-2-简单工厂
- 设计模式之-简单工厂模式
- 设计模式(一)--简单工厂模式
- 设计模式:浅析 抽象工厂、工厂方法、简单(静态)工厂 java实现
- 设计模式心得笔记--简单工厂
- 设计模式-简单工厂设计模式
- Head_First设计模式(三)----工厂模式简单工厂
- 黑马程序员_JAVA设计模式之简单工厂
- 设计模式-工厂模式(简单工厂模式和方法工厂模式)
- 设计模式之简单工厂(sample Factory)模式