设计模式之工厂模式
2016-04-10 19:38
232 查看
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
首先,创建一个接口Shape.java
然后,创建子类Circle.java及Square.java
接着,创建一个工厂类ShapeFactory.java
最后,创建测试类Test.java
另外,如果是抽象工厂的话,创建一个抽象工厂类AbstractFactory.java
然后,创建实现类AbstractShapeFactory.java
最后,测试类Test.java
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
首先,创建一个接口Shape.java
public interface Shape { public void draw(); }
然后,创建子类Circle.java及Square.java
public class Circle implements Shape { @Override public void draw() { System.out.println("draw circle..."); } }
public class Square implements Shape { @Override public void draw() { System.out.println("draw square..."); } }
接着,创建一个工厂类ShapeFactory.java
public class ShapeFactory { public <T> T getByClass(Class clazz) { try { return (T) Class.forName(clazz.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return null; } }
最后,创建测试类Test.java
public class Test { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Circle circle = (Circle) shapeFactory.getShapeByClass(Circle.class); circle.draw(); Square square = (Square) shapeFactory.getShapeByClass(Square.class); square.draw(); } }
另外,如果是抽象工厂的话,创建一个抽象工厂类AbstractFactory.java
public abstract class AbstractFactory { public abstract <T> T getByClass(Class clazz); }
然后,创建实现类AbstractShapeFactory.java
public class AbstractShapeFactory extends AbstractFactory { @Override public <T> T getByClass(Class clazz) { try { T cls = (T) Class.forName(clazz.getName()).newInstance(); return cls; } catch (Exception e) { e.printStackTrace(); } return null; } }
最后,测试类Test.java
public class Test { public static void main(String[] args) { AbstractFactory shapeFactory = new AbstractShapeFactory(); Circle circle = (Circle) shapeFactory.getByClass(Circle.class); circle.draw(); Square square = (Square) shapeFactory.getByClass(Square.class); square.draw(); } }
相关文章推荐
- 构建之法阅读笔记05
- Netty4——EventLoop
- PHP面向对象编程--继承(重写(多态)、封装、可见性)
- 早期Swift中Cocos2D初始化代码的重构
- 早期Swift中Cocos2D初始化代码的重构
- 早期Swift中Cocos2D初始化代码的重构
- [VB](更正:此前理解错误,static在整个程序运行中保留原值,每次调用过程static都应该保留上次原值,答案懒得改了)常见小程序积累
- CentOS下使用yum搭建LAMP环境
- 0036vs2008下ogre1.6.5常见的一个配置小遗漏
- Struts2中result的type属性;值栈
- LC28 Generate Parentheses
- ios解决http上传乱码问题
- Swift 入门基础
- HDU2034--人见人爱A-B
- CQOI2016 Number - 数位dp
- 多线程开发和Socket技术
- CodeForce 628B New Skateboard 水题
- 对前端的一点小理解
- 使用图灵机器人高速开发智能聊天机器人
- Http请求头探讨