简单工厂
来源:互联网 发布:sql forceseek 编辑:程序博客网 时间:2024/05/29 07:15
类图
代码
Product
public interface Product {public void doSomething();}ProductA
public class ProductA implements Product {@Overridepublic void doSomething() {System.out.println("ProductA -> doSomething");}}ProductB
public class ProductB implements Product {@Overridepublic void doSomething() {System.out.println("ProductB -> doSomething");}}Factory
public class Factory {public static Product create(String type) {if (type.equals("ProductA")) {return new ProductA();}if (type.equals("ProductB")) {return new ProductB();}throw new IllegalArgumentException("Not Support type = " + type);}}Client
public class MainClass {public static void main(String args[]) {Product p = Factory.create("ProductA");p.doSomething();}}
优缺点
优点:客户端免去了创建的职责
缺点:
不符合开闭原则
使用字符串的判断形式一定程度上把编译时期的问题推迟到运行时期
改进
对于开闭原则,使用反射的实现
Factory
package com.jue.simplefactory;public class Factory {public static Product create(Class clazzname) throws CreateFaildException {Product product = null;try {product = (Product) clazzname.newInstance();} catch (Exception e) {e.printStackTrace();throw new CreateFaildException();}return product;}public static class CreateFaildException extends Exception {}}Client
package com.jue.simplefactory;import com.jue.simplefactory.Factory.CreateFaildException;public class MainClass {public static void main(String args[]) {Product p;try {p = Factory.create(ProductA.class);p.doSomething();} catch (CreateFaildException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
0 0
- 简单工厂,工厂,抽象工厂
- 简单工厂、工厂、抽象工厂
- 简单工厂、工厂、抽象工厂
- 工厂模式-简单工厂
- 简单工厂 静态工厂
- 工厂模式-简单工厂
- 工厂 > 简单工厂
- 简单工厂,工厂方法
- 简单工厂
- 简单工厂
- 简单工厂
- 简单工厂
- 简单工厂
- 简单工厂
- 简单工厂
- 简单工厂
- 简单工厂
- 简单工厂
- Spring4.3.3 WebSocket-STOMP协议集成 (2)-WebSocket-stomp子协议通讯小栗子
- 洛谷 P1772 [ZJOI2006]物流运输
- Linux磁盘管理命令
- Session实现验证码登录
- pdo查询数据库
- 简单工厂
- noip2012同余方程 扩展欧几里德
- POJ1789 Truck History 最小生成树
- Stark_【快排】示例讲解
- Android使用Pull解析方式解析xml文件
- VBA工程中的Modules与Class Modules区别
- see
- 求教,一起来探讨一下
- 基于DSP的Bluetooth嵌入式系统应用