abstract class Person { public abstract void sayHello(); } class GDPerson extends Person { public void sayHello() { System.out.println("我是广东人"); } } class BJPerson extends Person { public void sayHello() { System.out.println("我是北京人"); } } class PersonFactory { static final int GD=1; static final int BJ=2; public static Person createPerson(int area) { switch (area) { case GD: return new GDPerson(); case BJ: return new BJPerson(); default: return null; } } } public class Demo5 { public static void main(String[] args) { Person gdPerson=PersonFactory.createPerson(PersonFactory.GD); gdPerson.sayHello(); Person bjPerson=PersonFactory.createPerson(PersonFactory.BJ); bjPerson.sayHello(); } }
调用者没必要知道对象是如何建立的,只要传入相应的参数就能够html
可是,若是这个时候须要添加其余的type,那么就要增长case,也就是对设计完成的类进行修改,而这样就违背了开放封闭原则设计模式
public interface PersonFactory { Person createPerson(); } class GDFactory implements PersonFactory { public Person createPerson() { return new GDPerson(); } } class BJFactory implements PersonFactory { public Person createPerson() { return new BJPerson(); } } public class Demo5 { public static void main(String[] args) { PersonFactory gdFactory=new GDFactory(); Person gdPerson=gdFactory.createPerson(); PersonFactory bjFactory=new BJFactory(); Person bjPerson=bjFactory.createPerson(); } }
abstract class Animal { public abstract void sayHello(); } class Cat extends Animal { public void sayHello() { System.out.println("瞄"); } } public interface Factory { Person createPerson(); Animal createAnimal(); } class Factory1 implements Factory { public Person createPerson() { return new BJPerson(); } public Animal createAnimal() { return new Cat(); } }
做者:jiajun 出处: http://www.cnblogs.com/-new/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。若是以为还有帮助的话,能够点一下右下角的【推荐】,但愿可以持续的为你们带来好的技术文章!想跟我一块儿进步么?那就【关注】我吧。设计