设计模式之简单工厂举例:
l简单工厂模式概述
•又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
l优点
•客户端不需要在负责对象的创建,从而明确了各个类的职责
l缺点
这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
概述:
动物抽象类: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");
}
}
}