工厂方法模式: 定义一个创建产品对象的工厂接口,让子类决定实例化哪种实例对象,将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品创建.
解决什么问题:
当子类型可能会有很多,以后需要不断添加不同子类的实现.
当一个系统尚在框架设计阶段,还不知道将来需要实例化那些具体类时.
系统设计之初不需要具体对象的概念.
UML:
代码结构:
代码:
定义抽象产品:
package com.demo.factory.model; /** * 定义抽象商品 */ public abstract class AbstractSword { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
定义实际商品:
package com.demo.factory.model.object; import com.demo.factory.model.AbstractSword; /** * 具体产品 */ public class DragonSword extends AbstractSword { public DragonSword() { this.setName("龙刀"); } }
定义抽象工厂:
package com.demo.factory.itf; import com.demo.factory.model.AbstractSword; /** * 定义的抽象产品 */ public interface ISwordFactory { AbstractSword createSword(); }
定义实际工厂:
package com.demo.factory; import com.demo.factory.itf.ISwordFactory; import com.demo.factory.model.AbstractSword; import com.demo.factory.model.object.DragonSword; /** * 定义具体工厂 */ public class DragonSwordFactory implements ISwordFactory{ @Override public AbstractSword createSword() { return new DragonSword(); } }
实现工厂方法:
package main; import com.demo.factory.DragonSwordFactory; import com.demo.factory.itf.ISwordFactory; /** * Main方法实现. */ public class MainApp { public static void main(String[] args) { ISwordFactory factory = new DragonSwordFactory(); factory.createSword(); System.out.println("生产龙刀"); } }