设计模式-工厂模式
简介
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
实现
我们将创建一个 Animal 接口和实现 Animal 接口的实体类。下一步是定义工厂类 AnimalFactory。
FactoryPatternDemo,我们的演示类使用 AnimalFactory 来获取 Aniaml 对象。它将向 AnimalFactory 传递信息(DOG / CAT / PIG),以便获取它所需对象的类型。
步骤1
创建一个接口:
public interface Animal{
void dc();
}
步骤2
创建实现接口的实体类:
public class Dog implements Animal{
@override
public void dc(){
System.out.println("Dog");
}
}
public class Cat implements Animal{
@override
public void dc(){
System.out.println("Cat");
}
}
public class Pig implements Animal{
@override
public void dc(){
System.out.println("Pig");
}
}
步骤3
创建一个工厂,生成基于给定信息的实体类的对象。
public class AnimalFactory{
public Animal getDc(String animalType){
if(animalType == null){ return null;
}
if(animalType.equalsIgnoreCase("DOG")){
return new Dog();
} else if(animalType.equalsIgnoreCase("CAT")){
return new Cat();
} else if(animalType.equalsIgnoreCase("PIG")){
return new Pig();
}
return null;
}
}
步骤4
使用该工厂,通过传递类型信息来获取实体类的对象。
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
//获取 Circle 的对象,并调用它的 dc 方法
Animal animal1 = shapeFactory.getDc("DOG");
//调用 Dog 的 dc 方法
animal1.dc();
//获取 Cat 的对象,并调用它的 dc 方法
Animal animal2 = shapeFactory.getDc("CAT");
//调用 Cat 的 dc 方法
animal2.dc();
//获取 Pig 的对象,并调用它的 dc 方法
Animal animal3 = shapeFactory.getDc("PIG");
//调用 Pig 的 dc 方法
animal3.dc();
}}