设计模式之工厂模式
1. 工厂方法
- 在父类中提供一个创建对象的方法,允许子类决定实例化的类型
- 工厂方法模式的角色
- 抽象产品:
- 具体产品:
- 抽象工厂:声明创建产品的抽象方法,方法的返回类型必须是产品的抽象、接口,方法的返回值由具体工厂来实现
- 具体工厂:抽象工厂的实现类,返回不同的具体产品
1.1 源码探究之Iterator
- JDK集合的Iterator迭代器就用工厂方法模式
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0c790996fac388c481b7cc45ed608313.png#pic_center)
- Collection对应的是抽象工厂
- ArrayList对应具体工厂
- Iterator是抽象产品
- ArrayList的私有内部类
Itr
实现了Iterator接口,是具体产品
public interface Collection<E> extends Iterable<E> {
Iterator<E> iterator();
}
public interface Iterator<E> {
boolean hasNext();
E next();
}
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
Itr() {}
public boolean hasNext() {
return cursor != size;
}
public E next() {
}
}
}
2. 抽象工厂
- 抽象工厂在工厂方法基础上,
- 抽象工厂的类的创建实例方法声明多个
- 多个对象创建方法,返回一系列的相关产品,这些产品有着相同的风格,是相同系列的不同变体
- 比如中国象棋的棋盘、棋子为一个具体工厂,围棋棋盘、棋子为一个工厂
- 模式结构:抽象工厂的模式结构与工厂方法大致相同,不同的是抽象工厂类中的声明了一组创建抽象产品的方法
2.1 示例
2.2 优缺点
- 优点
- 同一工厂生产的产品可以相匹配
- 避免客户端与具体产品代码的耦合
- 单一职责
- 开闭原则
- 缺点