Java设计模式之工厂方法模式
2017-09-08 16:42
369 查看
工厂模式(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中使用的是静态方法
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
下面通过简单举例来说明工厂方法模式的使用,逻辑关系如下图所示:
具体代码如下:
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设计模式——工厂方法(Factory Method)模式
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- 设计模式之—简单工厂方法(StaticFactory )-Java实现
- java 设计模式-创建模式之工厂方法模式1
- Java实践之路(设计模式)——工厂模式(工厂方法)
- Java设计模式之工厂方法模式
- java设计模式之工厂方法
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- java设计模式之工厂方法模式以及简单工厂模式还有抽象工厂模式
- JAVA设计模式学习之----创建模式:工厂模式(工厂方法)
- java 设计模式-创建模式之工厂方法模式2
- Java设计模式(2) -- 工厂方法
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- 设计模式(一)----- 工厂方法(FactoryMethod)----(JAVA版)
- Java设计模式之工厂方法模式
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- JAVA设计模式——工厂方法
- java设计模式--工厂方法设计模式
- java_23种设计模式之工厂方法模式
- 3.23种设计模式的Java版--Factory Method(工厂方法)