Java设计模式之工厂方法模式
来源:互联网 发布:免身份证开卡软件 编辑:程序博客网 时间:2024/05/29 19:00
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
下面通过简单举例来说明工厂方法模式的使用,逻辑关系如下图所示:
具体代码如下:
public interface Shape {
void draw();
}
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("画圆");
}
}
public class Square implements Shape{
@Override
public void draw() {
System.out.println("画正方形");
}
下面是工厂类,可以分三种方法实现,Android中更多的是以静态方法的形式生成实体类,其中个人认为通过反射的方法代码看起来比较简洁,可扩展性较好,但是缺点是性能较低
public class ShapeFactory {
public Shape getShape(String type){
if(type == null)
return null;
if("circle".equalsIgnoreCase(type)){
return new Circle();
}else if("square".equalsIgnoreCase(type)){
return new Square();
}
return null;
}
/**
* 通过静态方法生成相应实体类
*/
public static Circle getCircle(){
return new Circle();
}
public static Square getSquare(){
return new Square();
}
/**
* 通过反射得到具体实体类
*/
public static Object getType(Class<? extends Shape> cla){
Object object = null;
try {
object = Class.forName(cla.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return object;
}
}
}
下面是测试类:
public class FactoryTest {
public static void main(String[] args){
//常规写法
System.out.println("-----------常规方法------------");
ShapeFactory shapeFactory = new ShapeFactory();
Circle circle = (Circle) shapeFactory.getShape("circle");
Square square = (Square) shapeFactory.getShape("square");
circle.draw();
square.draw();
//通过静态方法
System.out.println("-----------静态方法------------");
ShapeFactory.getCircle().draw();
ShapeFactory.getSquare().draw();
//通过反射
System.out.println("-----------反射方法------------");
((Circle)ShapeFactory.getType(Circle.class)).draw();
((Square)ShapeFactory.getType(Square.class)).draw();
//新增画长方形
((Rectangle)ShapeFactory.getType(Rectangle.class)).draw();
}
}
测试控制台输出结果如下:
-----------常规方法------------
画圆
画正方形
-----------静态方法------------
画圆
画正方形
-----------反射方法------------
画圆
画正方形
画长方形
最后谈谈Android中工厂方法模式的使用:
BitmapFactory中使用的是静态方法
- JAVA设计模式之工厂模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- 【Java设计模式】之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之"工厂方法模式"
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java之设计模式---工厂方法模式
- Xshell 禁止自动滚动
- dubbo详解
- matlab图像处理基础知识3(双线性插值matlab实现--FPGA优化)
- ORB_SLAM2 源码阅读 ORB_SLAM2::ORBextractor
- 将任意Bytecode注入运行中的Python进程
- Java设计模式之工厂方法模式
- 按起止时间查询数据并实现“上拉显示更多”
- PGSQL 将字符串转换成double类型(to_number())
- jar包导入仓库中
- PBFT算法协议介绍
- Android不同drawable目录下对应图片分辨率
- 计算机网络知识整理:应用层,DHCP, DNS, SMTP, HTTP, FTP, TELNET, SNMP
- tensorflow实践-02:线性回归
- 关于mybatis里面的Executor