b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

解释器模式举例_lua解释器交互模式_动态编译与解释器模式(7)

电脑杂谈  发布时间:2017-02-22 17:29:35  来源:网络整理

在抽象工厂模式中,抽象产品 (AbstractProduct) 可能是一个或多个,从而构成一个或多个产品族(Product Family)。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式(不如上例减去耳机这种产品,就回到工厂方法模式了)。

这样举例子其实很空洞,这里只是为了比较三种模式,给出抽象的例子才更容易看出区别。

那么上例中实际应用就是生产迭代器的例子,这里也对齐扩展来介绍抽象工厂模式。Iterator迭代器是Collection专属的,但是现在我们希望能生产Map的迭代器,我们都知道,Map不是继承自Collection的,遍历的方式是不一样的,这就相当于2个产品族,接下来我们就要来实现它。

为了演示我们如果实现这个同时能生产Map和Collection的迭代器,我会将例子一步步贴出来:

首先是抽象产品,用来描述迭代器的公共接口:

//抽象产品public intece IIterator<T> {    boolean hasNext();    Object next();}

然后是抽象工厂,用来返回不同迭代器:

//抽象工厂public intece IIteratorFactory<T> {    IIterator<T> iteratorMap(Map<T,Object> m);    IIterator<T> iteratorCollection(Collection<T> c);}

接下来是具体产品。

Collection的迭代器(具体产品):

//具体产品,Collection迭代器(用到了代理模式)public class IteratorCollection<T> implements IIterator<T>{    Iterator<T> iterator;    public IteratorCollection(Collection<T> c){        iterator = c.iterator();    }    @Override    public boolean hasNext() {        return iterator.hasNext();    }    @Override    public T next() {        return iterator.next();    }}

Map的迭代器(具体产品):

//具体产品,Map迭代器(用到了代理模式)public class IteratorMap<T> implements IIterator<T>{    Iterator<Map.Entry<T, Object>> iterator;    public IteratorMap(Map<T,Object> m){        iterator = m.entrySet().iterator();    }    @Override    public boolean hasNext() {        return iterator.hasNext();    }    @Override    public Object next() {        return iterator.next().getValue();    }}

完成具体产品设计后,我们就要实现具体的工厂了:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...