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中使用的是静态方法


原创粉丝点击