标签:工厂方法模式
我现在有一个动物体系 所有的动物都要吃饭
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,这样就可以啦!
工厂方法的优缺点:
在工厂方法模式中,客户端不在负责对象的创建,并且当有新的子类添加的时候,我们只需要添加一个子类,和一个子类的工厂类,不需要修改以前的结构代码,后期更容易维护,增强了扩展性,缺点就是额外的写了更多的代码。。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:工厂方法模式
原文地址:http://blog.csdn.net/u013263323/article/details/47373777