标签:
设计模式之简单工厂举例:这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
概述:
动物抽象类:public abstract Animal { public abstract void eat(); }
具体狗类:public class Dog extends Animal {}
具体猫类:public class Cat extends Animal {}
开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。
源代码:package 创建型_简单工厂模式; public abstract class Animal { public abstract void eat(); }
package 创建型_简单工厂模式; public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); } }
package 创建型_简单工厂模式; public class Cat extends Animal { @Override public void eat() { System.out.println("貓吃魚"); } }
package 创建型_简单工厂模式; //如果你想买狗或者猫,那叫这个工厂类去造出来,你就不用早了 public class AnimalFactory { private AnimalFactory(){ } //下面写的static方法,但是也不是很好,因为后面很可能还要加一些方法,比如Pig,... public static Dog createDog(){ return new Dog(); } public static Cat createCat(){ return new Cat(); } //所以面向接口或抽象编程,穿什么类型就造什么类型,但是还是有缺陷可能传入的不能造 public static Animal createAnimal(String type){ if("dog".equals(type)){ return new Dog(); } else if("cat".equals(type)){ return new Cat(); } else{ return null; } } }
package 创建型_简单工厂模式; public class AnimalMain { public static void main(String[] args) { //具体类调用,自己造狗和猫 最原始的 Dog dog = new Dog(); dog.eat(); Cat cat = new Cat(); cat.eat(); System.out.println("---------"); //工厂有了后,通过工厂给造 有些缺陷的 // AnimalFactory af = new A..//不能再new,因为提供的是私有的构造方法 Dog dog2 = AnimalFactory.createDog(); Cat cat2 = AnimalFactory.createCat(); dog2.eat(); cat2.eat(); System.out.println("---------"); //工厂改进后 Animal animal = AnimalFactory.createAnimal("dog"); animal.eat(); //重新为animal赋值 animal = AnimalFactory.createAnimal("cat"); animal.eat(); //但是这个工厂还是有小问题的,你比如 animal = AnimalFactory.createAnimal("pig"); //animal.eat();//编译不会报错,但是运行会爆出空指针异常 //所以呢,我们在造东西(对象)时,要先判断一下,只要是对象就要判断 if(animal!=null){ animal.eat(); } else{ System.out.println("对不起,此工厂暂时不提供造猪pig"); } } }
标签:
原文地址:http://blog.csdn.net/u012110719/article/details/45421249