简单工厂模式
来源:互联网 发布:李兴华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();}}
阅读全文
1 0
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 简单工厂和工厂模式
- 简单工厂和工厂模式
- 1,工厂模式--简单工厂
- 简单工厂和工厂模式
- 简单工厂,工厂模式,抽象工厂
- 简单工厂,工厂模式,抽象工厂
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂模式和抽象工厂
- 那些年的风,那些年的雨,那些年一起走过的风风雨雨
- 避免发生内存抖动
- nyoj -17 单调递增最长子序列 动归
- 最全的Android源码目录结构详解
- Win32项目、控制台应用程序 、WPF
- 简单工厂模式
- 使用python matplotlib绘制高级图表
- 质因数计数公式 POJ 2992 Divisors
- VS2012使用EF错误:类型“System.Data.Entity.DbContext”在未被引用的程序集中定义。
- JZOJsenior3487.【NOIP2013模拟联考11】剑与魔法(dragons)
- 替罪羊树ScapeGoatTree&&(【luogu3369&&bzoj3324】普通平衡树)
- 【JZOJ 5498】 大佬的难题
- 二.将整型写入字节数组中(最大四位)
- 严格模式