简单_工厂方法(Factory Method)模式

方法工厂模式属于创建型模式,很简单很实用,java.util.Collection.#iterator即运用了此模式。以下的代码是本人初学设计模式的简单理解,参考于java.util.Collection.#iterator


package design.methodFactory2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-27 下午10:11:49 <br>
*
*/
public class Test {
public static void main(String[] args) {
/*
* 工厂方法(Factory Method)模式
*
* Collection:定义一个接口,该接口负责创建指定的产品Iterator
* Iterator:产品
* AbstractList/AbstractLinkedList:工厂接口的子类,紧紧负责创建自身需要的产品
*
* 简单工厂模式譬如String.valueOf()等都是一个静态的方法负责创建各式各样的产品,方法中有各式各样的
* 逻辑判断,初看貌似简单工厂是一个万能工厂,其实它是违反了开-闭原则的(开-闭:对扩展开放,对修改关闭),
* 如果以后需要添加新的产品那么就必须修改简单工厂的静态方法,如果产品的数量比较小那还不要紧,如果产品的
* 数量很多而且带有复杂的业务逻辑那就麻烦了,所以简单工厂只适用于创建产品数量很少的情况。
*
* 工厂方法模式就完全符合开闭原则,新增加的产品无需修改原有的工厂。
* 工厂方法模式中的抽象工厂类只是一个契约,它定义了要生产的产品,所有的子级工厂类都必须实现该契约。
* java.util.Collection.#iterator即运用了方法工厂模式
*/
Collection c1 = new AbstractList();
Iterator it = c1.iterator();

Collection c2 = new AbstractLinkedList();
it = c2.iterator();
}
}

package design.methodFactory2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-27 下午10:12:27 <br>
*
*/
public interface Collection {
Iterator iterator();
}

package design.methodFactory2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-27 下午10:12:59 <br>
*
*/
public interface Iterator {
boolean hasNext();

Object next();
}

package design.methodFactory2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-27 下午10:15:11 <br>
*
*/
public class AbstractList implements Collection {
public Iterator iterator() {
System.out.println("AbstractList");
return new Itr();
}

private class Itr implements Iterator {

public boolean hasNext() {
return false;
}

public Object next() {
// TODO Auto-generated method stub
return null;
}
}
}

package design.methodFactory2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-27 下午10:21:54 <br>
*
*/
public class AbstractLinkedList implements Collection {

public Iterator iterator() {
System.out.println("AbstractLinkedList");
return new linkedlistItr();
}

private class linkedlistItr implements Iterator {

public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}

public Object next() {
// TODO Auto-generated method stub
return null;
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值