FactoryMethod(工厂方法)模式

FactoryMethod (工厂方法)模式

 

GOF 定义一个用于创建对象接口,让子类决定实例化哪一个类。 FactoryMethod 使一个类的实例化延迟到其子类。

 

FactoryMethod 模式应该和 Abstract Factory 模式一起学习的,为了遵循《设计模式精解》一书的顺序放到了这里。同 Abstract Factory 模式一样 FactoryMethod 模式也是为了定义一系列相同的对象。在某些时候有必要创建于现存的某个类结构想对应得一个分层类结构,并让新的体系包含某些代理的责任。比如一个图形体系, Circle Square 为一个层次的类结构。当我们用到这一层类的对象的时候,不必去定义并实例化每一个对象,我只需要一个代理体系为我们生成这些对象。那么我们可以用 FactoryMethod 模式来达到这个目的。

 

FactoryMethod 模式在定义框架的过程中很常用。这是因为框架存在一个抽象的层次上。通常,它们不知道,而且也不应该关心特定对象的实例化。它们需要将特定对象的决策推迟给框架的用户。

 

下面是标准简化 UML 图:

 

下面是一个实现实例 ,我们依然用 Shape 例子来解释说明。(我已经快把 Shape 用滥了,初学者看到这里可千万别以为 OO 只 能解决 Shape 这样的问题, OO 的强大不是我能随便评论的,呵呵!)

package FactoryMethod;

 

public abstract class ShapeFactory

{

       public abstract void draw();

      

       public static ShapeFactory shapeFactory(String shape)// 用来生产对象

       {

              if(shape.equals("Circle")){

                     return new Circle();

              }

              else if(shape.equals("Square")){

                     return new Square();

              }

              else

                     return null;

       }//end shapeFactory(...)

}//end sbstract class ShapeFactory

 

package FactoryMethod;

 

public class Circle extends ShapeFactory

{

       public void draw()

       {

              System.out.println("Draw a Circle!");

       }//end draw()

}//end class Circle

 

package FactoryMethod;

 

public class Square extends ShapeFactory

{

       public void draw()

       {

              System.out.println("Draw a Square!");

       }//end draw()

}//end class Square

 

package FactoryMethod;

 

public class FactoryMethod

{

       private ShapeFactory shape;

      

       public void showFactoryMethod()

       {

              String[] str = {"Circle", "Square", "shape"};

              for(int i = 0; i < str.length; ++i){

                     shape = ShapeFactory.shapeFactory(str[i]);

                     if(shape != null)

                            shape.draw();

              }

       }//end showFactoryMethod()

 

       public static void main(String[] args)

       {

              System.out.println("The Factory Method Pattern!");

              FactoryMethod fm = new FactoryMethod();

              fm.showFactoryMethod();

       }//end main(...)

 

}//end class FactoryMethod

 

FactoryMethod 模式是一个很直观的模式,在实际中将会不断地重复使用。它适用于你希望将对象实例化的规则推迟到某 个派生类的那些情况。在这样的情况下,最自然的做法就是将方法的实现放在对该行为负责的对象中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值