(一)简单工厂模式(SimpleFatory)
最后更新于:2022-04-01 15:48:05
一点点从基础做起,23中设计模式一天看一个
首先学习了一个UML,但是没有能下到RationalRose,想去官网上下载,但是似乎收费,索性就用手头上的StartUML,其实就是一个工具,能实现就行了
SimpleFactory——简单设计模式原理图
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-07-12_578455cc584f8.png)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-07-12_578455cc6da29.png)
~~~
package com.designpattern.simplefactory;
public class Client {
public static void main(String[] args) {
Animal tiger = SimpleFactory.createAnimal("Tiger");
tiger.eat();
Animal dolphin = SimpleFactory.createAnimal("Dolphin");
dolphin.eat();
}
}
~~~
~~~
package com.designpattern.simplefactory;
public class SimpleFactory {
public static Animal createAnimal(String animalName) {
if ("Tiger".equals(animalName)) {
return new Tiger();
} else if ("Dolphin".equals(animalName)) {
return new Dolphin();
}
return null;
}
}
~~~
~~~
package com.designpattern.simplefactory;
public interface Animal {
public void eat();
}
~~~
~~~
package com.designpattern.simplefactory;
public class Dolphin implements Animal {
@Override
public void eat() {
System.out.println("Dolphin is eating");
}
public void swim() {
System.out.println("Dolphin is swimming");
}
}
~~~
~~~
package com.designpattern.simplefactory;
public class Tiger implements Animal {
@Override
public void eat() {
System.out.println("Tiger is eating");
}
public void run() {
System.out.println("Tiger is running");
}
}
~~~
简单工厂设计模式中,客户端不在负责对象的创建,而是把这个任务丢给了具体的工厂类,客户端置负责对对象的简单的调用,从而明确了各个类的职责。
由于简单的工厂模式使用静态的方法来创建对象,这就导致了静态方法无法被继承。另一方面,这个工厂类负责所有对象的创建,这回导致虽然具体的产品的不断增多,可能客户端对于某些产品的创建方式会有不同的要求,这样的话,就要不断的修改工厂类,增加了相应的判断逻辑,不利于后期的维护。
其实从这个简单的工厂模式的原理可以看出,原来在客户端要做的创建和初始化工作都被移到了工厂里去做,这样做,虽然是把创建对象和初始化工作于客户端分离了,实现了这部分的责任分配,但所有对象创建和初始化的工作还是都集中在了这个具体的工厂类里面,这样如果要创建的对象很多,这个工厂将会非常庞大,仍然不利于后期代码的维护。因此简单工厂模式只是使用与要创建的对象比较少和简单的时候,因此这个设计模式看一下过去就行了,也没有必要再这个上面下多大功夫,毕竟还是比较简单的东西,如果多了怎么办呢,这样就到了期待的下一个设计模式Factory Method