概述
抽象工厂模式
AbstractFactory就是把多个XxxFactory混合到一块的升级版
组合不同产品族里的产品,并在FactoryProduct工厂生成器类里通过getFactory方法引入AbstractFactory类,再调用抽象工厂类里相关的产品族多态生成产品实例.最终调用相关方法.
完整的应用步骤
- 创建形状接口
public interface Shape {
void draw();
}
- 实现具体形状类
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
- 创建颜色接口
public interface Color {
void fill();
}
- 创建颜色接口实现类
public class Red implements Color {
@Override
public void fill() {
System.out.println("Inside Red::fill() method.");
}
}
public class Green implements Color {
@Override
public void fill() {
System.out.println("Inside Green::fill() method.");
}
}
public class Blue implements Color {
@Override
public void fill() {
System.out.println("Inside Blue::fill() method.");
}
}
- 创建混合抽象工厂类
public abstract class AbstractFactory{
public abstract Shape getShape();
public abstract Color getColor();
}
- 创建具体工厂类
public class ShapeFactory extends AbstractFactory{
@Override
public Shape getShape(Class<? extends Shape> clazz){
try{
return (Shape)Class.forName(clazz.getName()).newInstance();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
@Override
public Color getColor(){
return null; //必须实现父类的全部抽象方法,剩一个也不行,否则子类不就变成抽象类了?
}
}
public class ShapeFactory extends AbstractFactory{
@Override
public Shape getShape(){
return null;
}
@Override
public Color getColor(Class<? extends Color> clazz){
try{
return (Color)Class.forName(clazz.getName()).newInstance();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
创建工厂生产器
反射获取具体工厂的实例
public class FactoryProduct{
public AbstractFactory getFactory(Class<? extends AbstractFactory> clazz){
try{
return Class.forName(clazz.getName()).newInstance();
}catch(Exception e){
e.printStackTrace();
}
}
}
创建Demo使用类
为了方便外人使用反射,可以在Shape接口,Color接口,AbstractFactory抽象类里分别定义字符串常量:如 static String CIRCLE = “Circle.class”; static String SHAPEFACTORY = “ShapeFactory.class”
public class AbstractFactoryPatternDemo{
public static void main(String[] args){
AbstractoryFactory factory_1 = FactoryProduct.getFactory(AbstractFactory.SHAPEFACTORY);//创建Shape工厂
Shape shape_1 = ShapeFactory.getShape(Shape.CIRCLE);//创建Circle实例
shape_1.draw();//使用Circle实例的画图方法画圆
Shape shape_2 = ShapeFactory.getShape(Shape.SQUARE);//创建Circle实例
shape_2.draw();//使用Circle实例的画图方法画圆
Shape shape_3 = ShapeFactory.getShape(Shape.RECTANGLE);//创建Circle实例
shape_3.draw();//使用Circle实例的画图方法画圆
AbstractoryFactory factory_2 = FactoryProduct.getFactory(AbstractFactory.COLORFACTORY); //创建Color工厂
Color shape_4 = ColorFactory.getShape(Color.RED);//创建Color实例
shape_4.fill();//使用Color实例的填充方法填色
Color shape_5 = ColorFactory.getShape(Color.BLUE);//创建Color实例
shape_5.fill();//使用Color实例的填充方法填色
Color shape_6 = ColorFactory.getShape(Color.GREEN);//创建Color实例
shape_6.fill();//使用Color实例的填充方法填色
}
}
最后
以上就是忧伤盼望为你收集整理的设计模式之抽象工厂模式,多个工厂类的抽象混合版的全部内容,希望文章能够帮你解决设计模式之抽象工厂模式,多个工厂类的抽象混合版所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复