工厂方法模式: 定义一个创建产品对象的工厂接口,让子类决定实例化哪种实例对象,将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品创建.
解决什么问题:
当子类型可能会有很多,以后需要不断添加不同子类的实现.
当一个系统尚在框架设计阶段,还不知道将来需要实例化那些具体类时.
系统设计之初不需要具体对象的概念.
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("生产龙刀");
}
}
浙公网安备 33010602011771号