设计模式:工厂方法模式

176 阅读1分钟

工厂方法模式

工厂方法模式是对简单工厂模式的升级,因为简单工厂模式违反了OCP原则。

###优点缺点

  • 优点:
    • client不需要知道产品是如何创造的
    • 灵活性增加,当出现新的产品,只需要多写一个具体产品类就好
  • 缺点:
    • 类的个数过多
    • 增加了系统的抽象性
    • 抽象产品只能生产一种产品(抽象工厂可以解决)

模式的结构和实现

结构

  • 抽象工厂:提供创建产品的接口,调用者提供它来访问具体工厂的来创建产品
  • 具体工厂:完成具体产品的创建
  • 抽象产品
  • 具体产品

image.png

实现

package FactoryMethod;

/**
 * @author richard
 * @date 2021年11月23日 15:15:00
 * @description TODO
 */
public class AnimalFarmTest {
    public static void main(String[] args) {

        AnimalFarm af=new HorseFarm();
        Animal horse=af.newAnimal();
        horse.shout();
    }
}
/**
 * 抽象产品:动物类
 */
interface Animal{
    public  void shout();
}
/**
 * 具体产品1
 */
class Duck implements Animal{
    @Override
    public void shout() {
        System.out.println("小鸭叫ing");
    }
}
/**
 * 具体产品2
 */
class Horse implements Animal{
    @Override
    public void shout() {
        System.out.println("马叫ing");
    }
}
/**
 * 抽象工厂:提供产品的生产方法
 */
interface AnimalFarm{
    public Animal newAnimal();
}
/**
 * 具体工厂duck
 */
class DuckFarm implements AnimalFarm{
    @Override
    public Animal newAnimal() {
        System.out.println("小鸭出生了");
        return new Duck();
    }
}
/**
 * 具体工厂horse
 */
class HorseFarm implements AnimalFarm{
    @Override
    public Animal newAnimal() {
        System.out.println("小马出生了");
        return new Horse();
    }
}