上一篇我写了简单工厂模式,我们来分析下简单工厂的优缺点,首先简单工厂是把各个种类的共同方法都抽象进来,然后再让子类去覆盖,这样的好处是对于那些只需要这些简单方法来说很实用,但是如果需要再增加一个方法怎么办?就需要修改抽象工厂类,那么这就违反了开放封闭原则,不便于扩展,而且修改源代码容易出错,如下抽象工厂解析图:
代码实现:
抽象工厂
package com.hy.abstract_factory;
public interface AnimalFactory {
public Animal createAnimal();
}
Bird工厂:
package com.hy.abstract_factory;
public class BirdFactory implements AnimalFactory {
@Override
public Bird createAnimal() {
return new Bird();
}
}
Duck工厂:
package com.hy.abstract_factory;
public class DuckFactory implements AnimalFactory {
@Override
public Duck createAnimal() {
return new Duck();
}
}
Animal抽象类:
package com.hy.abstract_factory;
public abstract class Animal {
public void fly(){};
public void speak(){};
public void walk(){};
}
Bird类
package com.hy.abstract_factory;
public class Bird extends Animal{
@Override
public void fly() {
System.out.println("bird is fly");
}
}
Duck类:
package com.hy.abstract_factory;
public class Duck extends Animal{
@Override
public void speak() {
System.out.println("duck is speak");
}
}
//测试类:
package com.hy.abstract_factory;
//抽象工厂测试类
public class TestAbstractFactory {
public static void main(String[] args) {
DuckFactory df = new DuckFactory();
df.createAnimal().speak();
BirdFactory bf = new BirdFactory();
bf.createAnimal().fly();
}
}