首页 > 代码库 > 工厂方法模式
工厂方法模式
工厂方法模式
场景:
我如今有一个动物体系 全部的动物都要吃饭
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维护,增强了扩展性。缺点就是额外的写了很多其它的代码。
。。。
工厂方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。