设计模式快速学习(二)抽象工厂模式

栏目: 后端 · 发布时间: 6年前

内容简介:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。直接上demo.先代码,后介绍。如果在之前你没有看过工厂模式,请坐下面的时光机传送,不光是思想基础,主要是演变的过程要知道。

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的 设计模式 属于创建型模式,它提供了一种创建对象的最佳方式。

直接上demo.先代码,后介绍。

如果在之前你没有看过工厂模式,请坐下面的时光机传送,不光是思想基础,主要是演变的过程要知道。 设计模式快速学习(一)工厂模式

1. 编写接口Shape

Shape.java

public interface Shape {
   void draw();
}
复制代码

2. 编写接口Shape的实现类Rectangle

Rectangle.java

/**
 * Created by Fant.J.
 */
public class Rectangle implements Shape {
    @Override
    public void describe() {
        System.out.println("我是个长方形");
    }
}
复制代码

3. 编写接口Shape的实现类Circle

Circle .java

/**
 * Created by Fant.J.
 */
public class Circle implements Shape {
    @Override
    public void describe() {
        System.out.println("我是个圆形");
    }
}
复制代码

4. 编写接口Color

Color .java

/**
 * Created by Fant.J.
 */
public interface Color {
    void fill();
}
复制代码

5. 编写接口Color 的实现类Red

Red .java

/**
 * Created by Fant.J.
 */
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("填充了红色");
    }
}
复制代码

6. 编写接口Color 的实现类Green

Green .java

/**
 * Created by Fant.J.
 */
public class Green implements Color {
    @Override
    public void fill() {
        System.out.println("填充了绿色");
    }
}
复制代码

7. 为 Color 和 Shape 对象创建抽象类来获取工厂

/**
 * Created by Fant.J.
 */
public abstract class AbstractFactory {
    abstract Color getColor(String color);
    abstract <T> T getShape(Class<T> clazz) ;
}

复制代码

8. 扩展(继承)AbstractFactory 工厂类,使其可以生成实体类Shape的对象

ShapeFactory .java

/**
 * Created by Fant.J.
 */
public class ShapeFactory extends AbstractFactory {
    @Override
    public Color getColor(String color) {
        return null;
    }


    @Override
    <T> T getShape(Class<T> clazz) {
        T obj = null;
        try {
            obj = clazz.getDeclaredConstructor().newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return obj;
    }
}
复制代码

9. 扩展(继承)AbstractFactory 工厂类,使其可以生成实体类Color的对象 . 略

10. 创建工厂生成器,用来生成Shape 或 Color 工厂

FactoryProducer .java

/**
 * Created by Fant.J.
 */
public class FactoryProducer {
    public static <T> AbstractFactory getFactory(String choice){
        if(choice.equalsIgnoreCase("SHAPE")){
            return new ShapeFactory();
        } else if(choice.equalsIgnoreCase("COLOR")){
            //这里不举例子了,你可以自己 创建一个 ColorFactory
            return null;
        }
        return null;
    }
}
复制代码

11. 测试

/**
 * Created by Fant.J.
 */
public class Test {
    public static void main(String[] args) {
        //抽象类不能直接调用,所以我们实例化 只能实例其子类对象
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
        shapeFactory.getShape(Circle.class).describe();
    }
}
复制代码

总结

这个实现看起来很复杂,我把大概思路总结一下: 首先,我们可以通过 工厂生成器 来生成一个抽象工厂类,然后调用抽象工厂类的扩展类(子类)方法。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Host Your Web Site In The Cloud

Host Your Web Site In The Cloud

Jeff Barr / SitePoint / 2010-9-28 / USD 39.95

Host Your Web Site On The Cloud is the OFFICIAL step-by-step guide to this revolutionary approach to hosting and managing your websites and applications, authored by Amazon's very own Jeffrey Barr. "H......一起来看看 《Host Your Web Site In The Cloud》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具