工厂方法模式
工厂方法模式是对简单工厂模式的升级,因为简单工厂模式违反了OCP原则。
###优点缺点
- 优点:
- client不需要知道产品是如何创造的
- 灵活性增加,当出现新的产品,只需要多写一个具体产品类就好
- 缺点:
- 类的个数过多
- 增加了系统的抽象性
- 抽象产品只能生产一种产品(抽象工厂可以解决)
模式的结构和实现
结构
- 抽象工厂:提供创建产品的接口,调用者提供它来访问具体工厂的来创建产品
- 具体工厂:完成具体产品的创建
- 抽象产品
- 具体产品
实现
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();
}
}