《设计模式精解》学习笔记(十五)------FactoryMethod(工厂方法)模式

《设计模式精解》学习笔记(十五)------FactoryMethod(工厂方法)模式

 

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

 

FactoryMethod模式应该和Abstract Factory模式一起学习的,为了遵循《设计模式精解》一书的顺序放到了这里。同Abstract Factory模式一样FactoryMethod模式也是为了定义一系列相同的对象。在某些时候有必要创建于现存的某个类结构想对应得一个分层类结构,并让新的体系包含某些代理的责任。比如一个图形体系,CircleSquare为一个层次的类结构。当我们用到这一层类的对象的时候,不必去定义并实例化每一个对象,我只需要一个代理体系为我们生成这些对象。那么我们可以用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模式是一个很直观的模式,在实际中将会不断地重复使用。它适用于你希望将对象实例化的规则推迟到某个派生类的那些情况。在这样的情况下,最自然的做法就是将方法的实现放在对该行为负责的对象中。

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=954070

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值