版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011541946/article/details/86094067
关于设计模式,前面我们学习了单例设计模式,这篇再来学习一个工厂方法模式,在介绍工厂方法模式之前,我们来看一个简单工厂模式。工厂模式的最大优点就是客户端不需要再创建对象,工厂类中就帮你提前创建好了,直接通过工厂类名点方法调用就好。简单工厂模式又叫静态方法工厂模式,它定义了一个具体的工厂类来创建一些类的实例。
1.代码举例
在Eclipse下创建一个samplefactory包,然后下面创建以下几个类,代码如下。
Animal.java代码
package samplefactory;
public abstract class Animal {
public abstract void eat();
}
AnimalFactory.java代码
package samplefactory;
public class AnimalFactory {
public static Dog createDog() {
return new Dog();
}
public static Cat createCat() {
return new Cat();
}
}
Cat.java 代码
package samplefactory;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
Dog.java代码
package samplefactory;
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
Test.java代码
package samplefactory;
public class Test {
public static void main(String[] args) {
Dog d = AnimalFactory.createDog();
d.eat();
Cat c = AnimalFactory.createCat();
c.eat();
}
}
运行下
狗吃肉
猫吃鱼
看到AnimalFactory类中需要创建多个动物,我们优化下代码,用一个方法就可以包括上面dog和cat的创建过程。
扫描二维码关注公众号,回复:
4898900 查看本文章
package samplefactory;
public class AnimalFactory {
public static Animal create(String name) {
if("dog".equals(name)) {
return new Dog();
}else if("cat".equals(name)) {
return new Cat();
}else {
return null;
}
}
}
修改下测试类
package samplefactory;
public class Test {
public static void main(String[] args) {
Dog d = (Dog) AnimalFactory.create("dog");
d.eat();
Cat c = (Cat) AnimalFactory.create("cat");
c.eat();
}
}
上面就是简单工厂模式,优点就是客户端不需要再负责对象的创建,从而明确了各个类的职责。缺点也很明显,这个静态工厂类负责所有对象的创建,如果有新对象增加,或者有些对象创建方式不同,就要不断地修改工厂类,不利于后期维护。下一篇,我们在这个基础上学习工厂方法模式,继续使用上面优点,避免缺点。