简单工厂模式

来源:互联网 发布:李兴华java虚拟机视频 编辑:程序博客网 时间:2024/06/06 05:44

一、优点

工厂类是整个模式的关键,包含了必要的逻辑判断,根据外界给定信息动态的创建具体的对象。外界只管使用不必在意是如何创建的

二、缺点

由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂中;它所能创建的类只能是事先考虑到的,如果需要添加新的类就需要改变工厂类了。

三、代码实现

package com.serendipity.simpleFactory;/** * 水果类   * @author Serendipity * */public abstract class Fruit {private String name;private int num;public abstract void eat();public String getName() {return name;}public void setName(String name) {this.name = name;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public Fruit(String name, int num) {super();this.name = name;this.num = num;}public Fruit() {}@Overridepublic String toString() {return "Fruit [name=" + name + ", num=" + num + "]";} }

package com.serendipity.simpleFactory;/** * 苹果类 继承Fruit * @author Serendipity * */public class Apple extends Fruit {public Apple(String name, int num) {super(name, num);}public Apple() {}@Overridepublic void eat() {System.out.println("吃苹果!!");}}

package com.serendipity.simpleFactory;/** * 橘子 继承Fruit * @author Serendipity * */public class Orange extends Fruit {public Orange(String name, int num) {super(name, num);}public Orange() {}@Overridepublic void eat() {System.out.println("吃橘子!!");}}

package com.serendipity.simpleFactory;/** * 梨  继承Fruit * @author Serendipity * */public class Pear extends Fruit {public Pear(String name, int num) {super(name, num);}public Pear() {}@Overridepublic void eat() {System.out.println("吃梨!!");}}

package com.serendipity.simpleFactory;/** * 水果工厂类 用于生产水果 *  * @author Serendipity * */public class FruitFactory {// 将构造函数私有化 private FruitFactory() {}/** * 通过形参的不同来创建不同的对象 * @param type * @return Fruit的相应子类 */public static Fruit getFruit(String type){//jdk1.7之后switch才能使用Stringswitch (type) {case "apple":return new Apple();case "pear":return new Pear();case "orange":return new Orange();default:return null;}}}
package com.serendipity.simpleFactory;/** * 测试类 * @author Serendipity * */public class Demo {public static void main(String[] args) {Fruit apple = FruitFactory.getFruit("apple");Fruit pear = FruitFactory.getFruit("pear");Fruit orange = FruitFactory.getFruit("orange");apple.eat();pear.eat();orange.eat();}}



原创粉丝点击