在上一篇中介绍了工厂模式,其中静态方法模式是效果比较好的.
现在需求变了,要在添加一个动物,猪.那就需要改代码了.
先加入猪这个类.
public class Pig extends Animal {
@Override
public void eat() {
System.out.println("猪吃");
}
}
然后在原来的静态方法工厂上添加一个方法
public class AnimalFactory3 {
public static Animal createDog() {
return new Dog();
}
public static Animal createCat() {
return new Cat();
}
// new
public static Animal createPig() {
return new Pig();
}
}
然后以后要是再来动物,就再在这个类里面加方法.
这样好像违反了开闭原则,对修改关闭,,
.所以不应该修改,用其他的方法..
把工厂给抽象出来,具体使用哪个工程,就new哪个,工厂也实现了单一原则.
public abstract class AnimalFactory {
public abstract Animal createAnimal();
}
public class CatFactory extends AnimalFactory {
@Override
public Animal createAnimal() {
return new Cat();
}
}
public class DogFactory extends AnimalFactory{
@Override
public Animal createAnimal() {
return new Dog();
}
}
public class PigFactory extends AnimalFactory{
@Override
public Animal createAnimal() {
return new Pig();
}
}
@Test
public void test4() {
AnimalFactory factory = new CatFactory();
Animal a = factory.createAnimal();
a.eat();
factory = new DogFactory();
a = factory.createAnimal();
a.eat();
factory = new PigFactory();
a = factory.createAnimal();
a.eat();
}