标签:top 抽象类 style pad out 动物类 结构 tom span
我如今有一个动物体系 全部的动物都要吃饭
Animal
|---AnimalFactory
|---Cat
|---Dog
代码例如以下:
/**
* 这是一个动物抽象类
*
*/
public abstract class Animal {
/**
* 吃的行为
*/
public abstract void eat();
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}假设还是像上一篇简单工厂这么写,那么还是不能不能避免最后出现的一个问题-----违反了开闭原则。如今对上面的体系进行一下改进。
Animal
|---AnimalFactory
|---Cat
|--CatFactory
|---Dog
|--DogFactory
代码例如以下:
动物工厂类
public abstract class AnimalFactory {
public abstract Animal creatAnimal();
}
public class CatFactory extends AnimalFactory {
@Override
public Animal creatAnimal() {
return new Cat();
}
}
public class DogFactory extends AnimalFactory {
@Override
public Animal creatAnimal() {
return new Dog();
}
}
public class Test {
public static void main(String[] args) {
AnimalFactory af=new CatFactory();
Animal cat = af.creatAnimal();
cat.eat();
AnimalFactory af2 = new DogFactory();
Animal dog = af2.creatAnimal();
dog.eat();
}
}比方我们须要加入一个PIg类,那么我们能够先把Pig造出来,然后为他写一个PigFactory,这个PigFactory继承自AnimalFactory,这样就能够啦!
工厂方法的优缺点:
在工厂方法模式中,client不在负责对象的创建。而且当有新的子类加入的时候。我们仅仅须要加入一个子类,和一个子类的工厂类,不须要改动曾经的结构代码。后期更easy维护,增强了扩展性。缺点就是额外的写了很多其它的代码。
。。。
标签:top 抽象类 style pad out 动物类 结构 tom span
原文地址:http://www.cnblogs.com/mthoutai/p/6855689.html