- 属于创建型设计模式
- 分为三种
- 应用在 Spring BeanFactory 中
- 使用一个抽象类来派生子类
- 扩展性差
- 创造方法通常为静态,所以也叫做静态工厂
// 产品抽象类
public abstract class Animal {
public abstract void desc();
}
// 实现类
public class Dog extends Animal {
@Override
public void desc() {
System.out.println("I am dog");
}
}
// 实现类
public class Elephant extends Animal {
@Override
public void desc() {
System.out.println("I am elephant");
}
}
// 实现类
public class Monkey extends Animal {
@Override
public void desc() {
System.out.println("I am monkey");
}
}
// 工厂类,用于创建对象
public class AnimalFactory {
public static final int DOG = 1;
public static final int ELEPHANT = 2;
public static final int MONKEY = 3;
// 根据传入的参数创建对象
public static Animal createAnimal(int type) {
switch (type) {
case DOG:
return new Dog();
case ELEPHANT:
return new Elephant();
case MONKEY:
default:
return new Monkey();
}
}
}
// 测试方法
public static void main(String[] args) {
// 创建第一个对象
Animal animal1 = AnimalFactory.createAnimal(AnimalFactory.DOG);
animal1.desc();
// 创建第二个对象
Animal animal2 = AnimalFactory.createAnimal(AnimalFactory.ELEPHANT);
animal2.desc();
}
// 结果
I am dog
I am elephant
- 增加扩展性
- 工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。
- 将实例化操作延迟到了子类中
// 工厂接口
public interface PhoneFactory {
Phone createPhone();
}
// 工厂子类
public class XiaoMiFactory implements PhoneFactory {
@Override
public Phone createPhone() {
return new XiaoMiPhone();
}
}
// 工厂子类
public class AppleFactory implements PhoneFactory {
@Override
public Phone createPhone() {
return new ApplePhone();
}
}
// 工厂子类
public class HuaWeiFactory implements PhoneFactory {
@Override
public Phone createPhone() {
return new HuaWeiPhone();
}
}
// 产品接口
public interface Phone {
void desc();
}
// 产品子类
public class XiaoMiPhone implements Phone {
@Override
public void desc() {
System.out.println("I am xiaomi Phone");
}
}
// 产品子类
public class HuaWeiPhone implements Phone {
@Override
public void desc() {
System.out.println("I am huawei Phone");
}
}
// 产品子类
public class ApplePhone implements Phone {
@Override
public void desc() {
System.out.println("I am Apple Phone");
}
}
// 测试类
public class Main {
public static void main(String[] args) {
PhoneFactory factory;
factory = new AppleFactory();
Phone apple = factory.createPhone();
apple.desc();
factory = new HuaWeiFactory();
Phone huawei = factory.createPhone();
huawei.desc();
factory = new XiaoMiFactory();
Phone xiaomi = factory.createPhone();
xiaomi.desc();
}
}
// 测试结果
I am Apple Phone
I am huawei Phone
I am xiaomi Phone
// 产品族
public interface Android {
void desc();
}
// 产品族
public interface IOS {
void desc();
}
// 产品实现类
public class HuaWei implements Android {
@Override
public void desc() {
System.out.println("I am huawei Android");
}
}
// 产品实现类
public class XiaoMi implements Android {
@Override
public void desc() {
System.out.println("I am xiaomi Android");
}
}
// 产品实现类
public class Iphone implements IOS {
@Override
public void desc() {
System.out.println("I am iphone ios");
}
}
// 工厂接口
public interface Factory {
IOS createIOS();
Android createAndroid();
}
// 具体工厂
public class PhoneFactory1 implements Factory{
@Override
public IOS createIOS() {
return new Iphone();
}
@Override
public Android createAndroid() {
return new HuaWei();
}
}
// 具体工厂
public class PhoneFactory2 implements Factory {
@Override
public IOS createIOS() {
return new Iphone();
}
@Override
public Android createAndroid() {
return new XiaoMi();
}
}
// 测试方法
public class Main {
public static void main(String[] args) {
Factory factory = new PhoneFactory1();
Android android1 = factory.createAndroid();
android1.desc();
IOS ios = factory.createIOS();
ios.desc();
factory = new PhoneFactory2();
Android android2 = factory.createAndroid();
android2.desc();
}
}
// 测试结果
I am huawei Android
I am iphone ios
I am xiaomi Android