您的位置:首页 > 编程语言 > Java开发

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中使用的是静态方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: