对象创建不要让Client端来做,提供工厂来实现
1. 简单工厂(参数决定类型)
- 缺点:违反OCP原则,增加新的工程生产对象,则需要修改原来代码
package com.design.pattern.day02;
public class Demo03 {
public static void main(String[] args) {
PhoneFactory factory = new PhoneFactory();
System.out.println(factory.createPhone("huawei").getClass());
System.out.println(factory.createPhone("apple").getClass());
}
}
class PhoneFactory {
// 根据参数类型决定生产的具体是什么类型的对象
public Phone createPhone(String type) {
switch (type) {
case "huawei":
return new HuaweiPhone();
case "apple":
return new ApplePhone();
default:
return null;
}
}
}
class HuaweiPhone implements Phone {
}
class ApplePhone implements Phone {
}
interface Phone {
}
2. 工厂多方法模式(多方法)
- 新增新的生产对象时候,只需要添加一个工厂方法即可
- 符合OCP原则
class PhoneFactory {
public Phone createApplePhone() {
return new ApplePhone();
}
public Phone createHuaweiPhone() {
return new HuaweiPhone();
}
}
3. 静态工厂模式
class PhoneFactory {
public static Phone createApplePhone() {
return new ApplePhone();
}
public static Phone createHuaweiPhone() {
return new HuaweiPhone();
}
}
4. 抽象工厂模式(Abstract Factory Pattern)
- 工厂勒再去创建一个公共接口
// 工厂类以及工厂的接口
class ToolFactory implements AbstractFactory {
@Override
public Animal createAnimal(AnimalNameEnum type) {
switch (type) {
case CAT:
return new Cat();
case DOG:
return new Dog();
default:
return null;
}
}
@Override
public Phone createPhone(PhoneNameEnum type) {
switch (type) {
case APPLE:
return new ApplePhone();
case HUAWEI:
return new HuaweiPhone();
default:
return null;
}
}
}
interface AbstractFactory {
Animal createAnimal(AnimalNameEnum type);
Phone createPhone(PhoneNameEnum type);
}
// 枚举
enum AnimalNameEnum {
DOG, CAT
}
enum PhoneNameEnum {
HUAWEI, APPLE
}
// 动物类型
class Dog implements Animal {
}
class Cat implements Animal {
}
interface Animal {
}
// 手机类型
class HuaweiPhone implements Phone {
}
class ApplePhone implements Phone {
}
interface Phone {
}