设计模式/创建型设计模式
简述
用工厂方法代替 new 操作,让子类决定实例化哪个类,工厂方法将一个类的实例化延迟到子类
- 优点
- 解藕:调用方不用负责对象的创建,只需要使用,明确各自的职责
3种工厂模式
简单工厂模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| public interface Animal { void run(); }
@Slf4j public class Cat implements Animal { public void run() { log.info("猫 —> 🐱"); } }
@Slf4j public class Dog implements Animal { public void run() { log.debug("狗 —> 🐶"); } }
public class SimpleAnimalFactory { public static Animal create(int type) { Animal animal = null; switch (type) { case 1: animal = new Cat(); break; case 2: animal = new Dog(); break; } return animal; } }
public class Client { public static void main(String[] args) { Animal simpleCat = SimpleAnimalFactory.create(1); simpleCat.run(); Animal simpleDog = SimpleAnimalFactory.create(2); simpleDog.run(); } }
|
工厂模式
工厂模式跟简单工厂模式的区别在于简单工厂只有一个工厂类,提供了一个工厂方法,
由入参决定生产那个产品,而工厂模式则定义一个工厂接口,不同的产品工厂实现工厂接口,
生产的产品由产品工厂决定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class CatFactory { public static Animal create() { return new Cat(); } }
public class DogFactory { public static Animal create() { return new Dog(); } }
public class Client { public static void main(String[] args) { Animal simpleCat = CatFactory.create(); simpleCat.run(); Animal simpleDog = DogFactory.create(); simpleDog.run(); } }
|
抽象工厂模式
抽象工厂就是一个工厂不单生产一个种类的产品,而是生产多个种类的产品,
也就是生产相关产品的产品家族
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public interface AbstractAnimalFactory {
Animal createCat();
Animal createDog(); }
public class AbstractFactory implements AbstractAnimalFactory { @Override public Animal createCat() { return new Cat(); }
@Override public Animal createDog() { return new Dog(); } }
public class Client { public static void main(String[] args) { AbstractFactory factory = new AbstractFactory(); factory.createCat().run(); factory.createDog().run(); } }
|