为什么要使用工厂模式
初学者一般创建实例对象通常使用new关键字,但遇到初始化工作如果是很长一段代码,那岂不是要做很多工作,将很多工作装入一个方法中,相当于将很多鸡蛋放入一个篮子里,危险。而且也不符合java面向对象的原则。
工厂模式防止用来实例化一个类的数据和代码在多个类中到处都是,可以将有关创建的代码搬到一个工厂类中,可以简化New的过程,让程序更健康。
注意:复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
什么是工厂模式
工厂模式是java中最常用的设计模式之一,属于创建型模式,提供了创建对象的最佳方案。(比如要换新手机了,可以直接在 专卖店(工厂)提货,而不用去管这部手机是怎么做出来的)
怎么使用工厂模式
首先定义一个创建对象的接口,然后让它的子类决定实例化哪一个工厂类。工厂模式使其创建过程延迟到子类进行。
实现过程:
第一步:创建shape接口
shape.java
public interface Shape{
void drow();
}
第二步:创建实现接口的实体类
Rectangle.java
public class Rectangle implements Shape{
//重写接口的方法
@override
public void draw(){
System.out.draw("你好,Rectangle!")
}
}
Square.java
public class Square implements Shape {
@Override
public void draw() {
System.out.println("你好,Square");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("你好,Circle");
}
}
第三步:创建工厂类
ShapeFactory.java
public class ShapeFactory{
//获得上面三个实体类的对象
public Shape getShape(String shapeType){
if(shapeType==null){
return null;
}
//equalsIgnoreCase忽略字符串的大小写
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
}else if((shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
}else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
第四步:使用工厂,通过传递类型信息来获取实体类的对象
FactoryPatternDemo.java
public class FactoryPatternDemo{
public static void main(String[]args){
ShapeFactory shapeFactory=new ShapeFactory();
Shape s1=shapeFactory.getShape("SQUARE");
s1.draw();
Shape s2=shapeFactory.getShape("CIRCLE");
s2.draw();
Shape s3=shapeFactory.getShape("RECTANGLE");
s3.draw();
}
}
ok,输出结果就好。(实例应用的例子来自菜鸟教程http://www.runoob.com/design-pattern/factory-pattern.html)