简单工厂模式不属于标准的Java 23设计模式之内。根据分类,简单工厂模式又分类为:1.普通简单工厂模式。2.多方法简单工厂模式。3.静态方法简单工厂模式。
1.普通简单工厂模式
先从最简单的普通简单工厂模式开始,工厂模式就是用来进行类的实例化,对实现了同一接口的类进行类的实例化。
公共的接口
public interface Animal {
void eat();
}
类实现公共的接口
public class Dog implements Animal{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("Dog eat");
}
}
public class Cat implements Animal{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("Cat eat");
}
}
工厂类,用来创建实例
public class AnimalFactory {
public Animal makeAnimal(String type) {
if (type.equals("dog")) {
return new Dog();
} else if (type.equals("cat")) {
return new Cat();
}
return null;
}
}
测试类
public class AnimalTest {
public static void main(String[] args) {
AnimalFactory animalFactory = new AnimalFactory();
Animal cat = animalFactory.makeAnimal("cat");
cat.eat();
Animal dog = animalFactory.makeAnimal("dog");
dog.eat();
}
}
输出:
Cat eat
Dog eat
2.多方法简单工厂模式
接着,循序渐进,我们开始了解多方法简单工厂模式,为了避免在创建对象的时候传递错误字符串导致创建错误实例,我们改成不传递字符串的方式,在工厂类里面,有多个工厂方法来达到创建多个对象的目的。
1.修改工厂类
public class AnimalFactory {
public Animal produceDog() {
return new Dog();
}
public Animal producCat() {
return new Cat();
}
}
测试类修改:
public class AnimalTest {
public static void main(String[] args) {
AnimalFactory animalFactory = new AnimalFactory();
Animal cat = animalFactory.producCat();
cat.eat();
Animal dog = animalFactory.produceDog();
dog.eat();
}
}
输出:
Cat eat
Dog eat
3.静态方法简单工厂模式
最后,我们开始了解静态方法简单工厂模式,为了不需要new 工厂类,我们在工厂类创建对象的方法改成静态调用。
1.修改工厂类
public class AnimalFactory {
public static Animal produceDog() {
return new Dog();
}
public static Animal producCat() {
return new Cat();
}
}
测试类
public class AnimalTest {
public static void main(String[] args) {
Animal cat = AnimalFactory.producCat();
cat.eat();
Animal dog = AnimalFactory.produceDog();
dog.eat();
}
}
输出:
Cat eat
Dog eat
综上所述:对比三种简单工厂模式,不难看出,第三种方式的优势最为明显,不需要担心在获取实例的时候传递错字符串,也避免了去写new 工厂类的繁琐,所以,一般情况下,我们会使用第三种方式。
网友评论