(一)简单工厂模式
来源:互联网 发布:apache进程几十兆 编辑:程序博客网 时间:2024/04/27 00:09
简单工厂模式
一、什么是简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
二、模式中包含的角色及其职责
1.工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品(Concrete Product)角色
简单工厂模式所创建的具体实例对象
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断
逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的
对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无
需了解这些对象是如何创建以及如何组织的。有利于整个软件体系
结构的优化。
不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中
了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的
具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展
性并不很好。
四、代码演示
package org.fbm.simplefactory;//抽象类,水果public interface Fruit {public void get();}
package org.fbm.simplefactory;//具体产品(Concrete Product)角色public class SimpleFactory {//第一种实现方法public static Fruit getApple(){return new Apple();}public static Fruit getBanana(){return new Banana();}//第二种实现的方法public static Fruit getFruitTwo(String type) { try{ if(type.equalsIgnoreCase("apple")){ return Apple.class.newInstance(); } if(type.equalsIgnoreCase("banana")){ return Banana.class.newInstance(); } }catch(Exception e){ e.printStackTrace(); } return null;}//第三种实现方式public static Fruit getFruitThree(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException{Class<?> fruit = Class.forName(type);return (Fruit) fruit.newInstance();}}
package org.fbm.simplefactory;//具体产品(Concrete Product)角色,苹果类public class Apple implements Fruit {@Overridepublic void get() {System.out.println("我爱吃苹果");}}
package org.fbm.simplefactory;//具体产品(Concrete Product)角色,香蕉类public class Banana implements Fruit {@Overridepublic void get() {System.out.println("我爱吃香蕉");}}
package org.fbm.simplefactory;//客户端调用public class MainClass {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {Fruit apple1=SimpleFactory.getFruitTwo("apple");Fruit banana1=SimpleFactory.getFruitTwo("banana");apple1.get();banana1.get();Fruit apple2=SimpleFactory.getFruitThree("org.fbm.simplefactory.Apple");Fruit banana2=SimpleFactory.getFruitThree("org.fbm.simplefactory.Banana");apple2.get();banana2.get();Fruit apple3=SimpleFactory.getApple();Fruit banana3=SimpleFactory.getBanana();apple3.get();banana3.get();}}
0 0
- 一、简单工厂模式
- 一 简单工厂模式
- 一、简单工厂模式
- (一)简单工厂模式
- (一)简单工厂模式
- 一 简单工厂模式
- 一、简单工厂模式
- 一、简单工厂模式
- 一、简单工厂模式
- 简单工厂模式(一)
- 工厂模式(一)--简单工厂模式
- 工厂设计模式一 简单工厂模式
- 模式一(简单工厂)
- 简单工厂模式(一)
- (一)简单工厂模式
- 设计模式一 简单工厂
- 简单工厂模式(一)
- (一)简单工厂模式
- POS58热敏打印解决方法
- 网络管理软件
- jquery 插件添加的几种访求
- oracle 判断字段是否为数值型
- 「索引」《Python基础教程》学习笔记
- (一)简单工厂模式
- 读书笔记:“集体智慧编程”之第三章:带偏好条件的聚类及聚类的展示方式
- 查看表空间占用情况
- unix shell取5个月前的时间
- LeetCode OJ:Partition List
- XBMC皮肤开发入门篇
- R语言学习笔记2——数据集
- <MEMORY>Project Euler NO22
- 自己仿写一个ucosii(四) 任务调度函数