简单工厂模式是Java常用的一种模式,属于创建型模式。
模块划分
1.工厂接口:一个创建对象的接口。
2.实体类:实现接口的对象,并重新接口的方法。
3.工厂类:定义关键字并创建对应的对象。
4.实现类:传入需要的关键字进行创建需要的对象。
优点
扩展性高,需要一个对象,创建一个对象。
缺点:
在创建多个对象后,复杂性变高,不好维护。
代码
接口: 用于各种形状,内含绘制方法。
package com.elaine.testpattern.simplefactory;
/**
* 接口
* 内含方法
*
* @author elaine
*/
public interface Shape {
void draw();
}
实体类:
圆形:实现接口Shape,并重写draw()方法。
package com.elaine.testpattern.simplefactory;
/**
* 圆形
*
* @author elaine
*/
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
正方形:实现接口Shape,并重写draw()方法。
package com.elaine.testpattern.simplefactory;
/**
* 正方形
*
* @author elaine
*/
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
长方形:实现接口Shape,并重写draw()方法。
package com.elaine.testpattern.simplefactory;
/**
* 长方形
*
* @author elaine
*/
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
*工厂类:*定义关键字以及其对应的对象。
package com.elaine.testpattern.simplefactory;
/**
* 形状工厂
*
* 根据传入的关键字,对比进行创建对象。
*
* @author elaine
*/
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
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;
}
}
*实现类:*传入知晓的关键字进行创建对象。
package com.elaine.testpattern.simplefactory;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.elaine.testpattern.R;
/**
* 简单工厂模式实现类
*
* @author elaine
*/
public class SimpleFactoryActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_factory);
use();
}
private void use() {
ShapeFactory shapeFactory = new ShapeFactory();
Shape shapeOne = shapeFactory.getShape("CIRCLE");
shapeOne.draw();
Shape shapeTwo = shapeFactory.getShape("RECTANGLE");
shapeTwo.draw();
Shape shapeThree = shapeFactory.getShape("SQUARE");
shapeThree.draw();
}
}