一、介绍
工厂模式属于设计模式的创建型模式,通过实现共同的抽象接口创建属于同一类类型的不同对象实现,隐藏了对象创建的逻辑,提供了一种创建对象的最佳方式。
二、优缺点
优点:
1、屏蔽产品对象的具体实现,使调用者只关注接口。
2、扩展性高,如果需要增加产品,只需要添加工厂类就可以,无需修改源代码。
3、通过名字就可以创建想要的对象。
缺点:
扩展性高,但每增加一个产品类就要增加一个具体的产品类和工厂类,系统中的类成倍增加,增加了类的复杂度。
三、应用
工厂类主要应用在日志记录器,数据访问等
1、可以根据系统具体需求,创建保存在本地磁盘,远程服务器或系统事件等日志对象实现不同功能。
2、数据库访问,如Hibernate可根据不同的配置访问不同数据库。
四、具体实现
抽象产品类接口:
package com.factoryPattern;
public interface Shape {
void draw();
}
具体产品实现类:
//Circle类
package com.factoryPattern;
public class Circle implements Shape {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("Circle");
}
}
//Rectangle类
package com.factoryPattern;
public class Rectangle implements Shape {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("Ranctangle");
}
}
工厂类:
package com.factoryPattern;
public class ShapeFactory {
public Shape getShape(String name){
if(name == null)
return null;
else if(name.equalsIgnoreCase("Rectangle"))
return new Rectangle();
else if(name.equalsIgnoreCase("Circle"))
return new Circle();
else if(name.equalsIgnoreCase("Square"))
return new Square();
return null;
}
}
调用实例类:
package com.factoryPattern;
public class FactoryPatternDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ShapeFactory factory = new ShapeFactory();
Shape rectangle = factory.getShape("Rectangle");
rectangle.draw();
Shape circle = factory.getShape("Circle");
circle.draw();
Shape square = factory.getShape("Square");
square.draw();
}
}