java创建型设计模式-工厂方法(1)

什么是工厂方法模式?

定义

产品:实例(对象)。
工厂:生产产品,即实例(对象)。
工厂方法模式(Factory Method):不通过构造方法实现对类的实例化,而是通过一个工厂类(Factory class)实现对共同接口(IFactory)或者共同继承的类进行实例化。

适用情况

当共同接口或者共同继承的类被程序大量需要实例过于复杂(构造参数过多)的时候,可通过工厂方法模式进行创建,为了避免过多实例化工厂类占用内存,我们常选用第三种静态工厂方法模式来生产产品(实例)。

程序解析

普通工厂方法模式

建立一个工厂类,接受不同的参数,可对共同接口或者共同继承的一些类进行不同的实例创建。

实现的思路

1.圆形类和矩形类拥有的方法-getArea() 获取面积;
2.则创建共同的接口几何图形(IGeometric),并抽象方法-getArea();
public interface IGeometric
{
    public double getArea ();
}
3.然后圆形类(Circle)和矩形类(Rectangle)分别实现接口。

Circle类

public class Circle implements IGeometric
{
    private double radius = 1;
    @Override
    public double getArea ()
    {
        return radius*radius*Math.PI;
    }
}

Rectangle类

public class Rectangle implements IGeometric
{
    private double width = 1;
    private double height = 1;
    @Override
    public double getArea ()
    {
        return width*height;
    }
}
4.用户可以通过调用工厂类的公有静态方法赋入工厂类的常量实现不同实例的创建。

SimpleFactory - 工厂类

public class SimpleFactory
{
    public static final int Circle = 1;
    public static final int RECTANGLE = 2;

    public static IGeometric createGeometric ( int type )
    {
        switch ( type )
        {
            case Circle:
                return new Circle();
            case RECTANGLE:
                return new Rectangle();
            default:
                throw new NullPointerException("Not have this type.");
        }
    }

}

多个工厂方法模式

与普通工厂类不同的是工厂类,对于不同实例都有不同的方法进行实例的创建,即一个方法对应一个类的实例创建,防止出现赋入错误参数进行错误的实例创建或异常抛出。

MoreFactory - 工厂类

public class MoreFactory
{
    public static IGeometric createCircle()
    {
        return new Circle();
    }

    public static IGeometric createRectangle()
    {
        return new Rectangle();
    }
}

源码下载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值