定义
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使得类的实例化延迟到其子类。
- 抽象产品角色(Product):定义产品的接口
- --具体产品角色(ConcreteProduct) :实现接口Product的具体产品类
- 抽象工厂角色(Creator) :声明工厂方法(FactoryMethod),返回一个产品
- --真实的工厂(ConcreteCreator):实现FactoryMethod工厂方法,由客户调用,返回一个产品的实例。
或者说:新增一个产品都必须要新增一个与其相对应的工厂类,即每一个具体工厂都负责生产一种对应的产品(产品继承了同一抽象类或者接口)。
和简单工厂模式相比,工厂模式是将产品的创建下沉到其子类。
类图
代码
public class FactoryPattern {
public static void main(String[] args) {
Factory factory = new HuaWeiFactory();
Phone phone = factory.createPhone();
phone.print();
}
}
interface Phone { void print();}
class iPhone implements Phone {
@Override
public void print() {
System.out.println("com.mxy.dp.iPhone");
}
}
class HuaWeiPhone implements Phone {
@Override
public void print() {
System.out.println("com.mxy.dp.HuaWeiPhone");
}
}
interface Factory { Phone createPhone();}
class IPhoneFactory implements Factory {
@Override
public Phone createPhone() {
return new iPhone();
}
}
class HuaWeiFactory implements Factory {
@Override
public Phone createPhone() {
return new HuaWeiPhone();
}
}
场景
JDK中的collection
Collection接口
定义了iterator ()方法
Iterator 接口
定义了返回的对象