我是靠谱客的博主 忧伤盼望,最近开发中收集的这篇文章主要介绍设计模式之抽象工厂模式,多个工厂类的抽象混合版,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

抽象工厂模式

AbstractFactory就是把多个XxxFactory混合到一块的升级版

组合不同产品族里的产品,并在FactoryProduct工厂生成器类里通过getFactory方法引入AbstractFactory类,再调用抽象工厂类里相关的产品族多态生成产品实例.最终调用相关方法.

被继承
定义get产品族metod
定义getFactory方法
定义产品族接口
实现具体类
定义抽象工厂
具体产品族工厂
反射生成具体产品的实体
定义工厂生产器
根据输入字符信息返回对应的具体产品族工厂的实体
具体工厂生产器
带main的Demo执行类
先用工厂生成器生成具体工厂
再用反射生成具体产品的实例
再用反射生成具体产品
最后使用实例的方法.

完整的应用步骤

  1. 创建形状接口
public interface Shape {
void draw();
}
  1. 实现具体形状类
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.");
}
}
  1. 创建颜色接口
public interface Color {
void fill();
}
  1. 创建颜色接口实现类
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.");
}
}
  1. 创建混合抽象工厂类
public abstract class AbstractFactory{
public abstract Shape getShape();
public abstract Color getColor();
}
  1. 创建具体工厂类
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实例的填充方法填色
}
}

最后

以上就是忧伤盼望为你收集整理的设计模式之抽象工厂模式,多个工厂类的抽象混合版的全部内容,希望文章能够帮你解决设计模式之抽象工厂模式,多个工厂类的抽象混合版所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部