工厂模式:工厂不会实例化,实例化放在工厂的实现类里面。
工厂接口Ifactory —— 具体的工厂factory实现Ifactory,即创建具体产品的类 XXReal
|| ||
产品抽象类AbsractProduct—— 具体的产品product继承AbstractProduct,即具体的产品类。
结构图
使用的场合:
程序后期会有很多子类的加入
程序设计初期没有具体的类结构或者不需要具体的类结构
代码:
抽象产品类public abstract class AbstractSword {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
抽象工厂接口
public interface Ifactory {
AbstractSword create();//返回上面的一个抽象产品类
}
具体工厂类
public class sevenReal implements Ifactory {
@Override
public AbstractSword create() {
return new Seven();//返回一个具体的产品
}
}
具体产品类
public class Eight extends AbstractSword{
public Eight(){
this.setName("八星宝刀");//具体产品类
}
}
测试用类
public class MainAPP {
public static void main(String[] args) {
Ifactory factory = new eightReal();
AbstractSword eight = factory.create();
System.out.println("创建了一把"+eight.getName());//调用的父类的getName
}
}
工厂模式在JSDK中的应用
接口java.util.LIst中的Iterator() 抽象方法返回一个 Iterator (抽象产品)。抽象工厂返回抽象产品
List各个子类重写Iterator()方法返回一个具体的iterator对象。 具体工厂返回具体产品。 具体产品的创建留给子类完成