工厂方法模式
来源:互联网 发布:adobe reader for mac 编辑:程序博客网 时间:2024/06/04 19:48
工厂模式(Factory Method)是23种设计模式之一。
工厂模式又可分为:普通工厂模式,多个工厂方法模式,静态工厂方法模式。
普通工厂模式:就是建立一个工厂类,对实现了统一接口的一些类进行实例的创建。
我们以Animal接口,Dog类,Cat类为例,看一下继承关系。
Animal.java代码:
public interface Animal {public void play();}
Dog.java代码:
public class Dog implements Animal{@Overridepublic void play() {System.out.println("I am a dog!");}}
Cat.java代码:
public class Cat implements Animal{@Overridepublic void play() {System.out.println("I am a cat!");}}
Dog类继承了Animal接口,并实现了接口中的抽象方法play();。
Cat类继承了Animal接口,并实现了接口中的抽象方法play();。
接下来我们写工厂类的代码。
AnimalFactory.java代码:
public class AnimalFactory {public Animal produce(String animal){if(animal.equals("dog")){return new Dog();}else if(animal.equals("cat")){return new Cat();}else{System.out.println("输入的参数有误!");return null;}}}AnimalFactory类是一个典型的工厂类,用工厂类来返回Animal接口的实例。
我们再写一个AnimalTest类来测试一下。
AnimalTest.java代码:
public class AnimalTest {public static void main(){AnimalFactory animalFactory=new AnimalFactory();Animal dog=animalFactory.produce("dog");dog.play();} }控制台输出结果如下:
I am a dog!以上我们可以看出实例化了一个Dog类的对象给接口。
这种普通工厂方法实现了通过工厂类来实例化接口的对象,但是需要我们手动的传人参数,这对有时候我们不知道具体的参数产生了麻烦。
有什么好的方法来解决这个问题嘛?
接下来我们介绍多个工厂方法模式。
多个工厂方法模式:是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,
分别创建对象。
对上面的代码,我们只需要改动AnimalFactory类代码就可以了。
修改后的AnimalFactory.java代码:
public class AnimalFactory {public Animal produceDog(){return new Dog();}public Animal produceCat(){return new Cat();}}我们再修改一下AnimalTest类来测试一下。
修改后的AnimalTest.java代码:
public class AnimalTest {public static void main(){AnimalFactory animalFactory=new AnimalFactory();Animal cat=animalFactory.produceCat();cat.play();} }
控制台输出结果如下:
I am a cat!好了,到了这一步,我们来想一下,我们用工厂设计模式就是为了更好的实例化对象,但是我们却忽略了我们的工厂类对象是我们通过new关键字获得的。
会不会觉得很麻烦,不想这样做?
接下来我们介绍静态工厂方法模式。
静态工厂方法模式:将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
我们还是来修改AnimalFactory类。
修改后的AnimalFactory.java代码:
public class AnimalFactory {public static Animal produceDog(){return new Dog();}public static Animal produceCat(){return new Cat();}}
我们再修改一下AnimalTest类来测试一下。
修改后的AnimalTest.java代码:
public class AnimalTest {public static void main(){Animal dog=AnimalFactory.produceDog();dog.play();} }
控制台输出结果如下:
I am a dog!
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传人的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多情况下,我们会选用第三种——静态工厂方法模式。
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- canvas自适应圆形时钟绘制
- 关闭CMD进程-JAVA
- InteliJ Idea pom.xml不自动提示的解决
- System.getProperty("line.separator") 的含义
- java 方式配置spring mvc 继承WebMvcConfigurerAdapter和继承WebMvcConfigurationSupport
- 工厂方法模式
- 两个链表的第一个公共结点
- Docker制作数据库中间件Mycat源码镜像
- OPENCV学习一(滤波)
- 如果 TCP 协议中三次握手不携带序列号,会造成什么样的后果
- 一个界面出现多个seekbar的时候导致seekbar滑动不灵敏的问题
- 1041. 考试座位号(15)
- 21.缺陷管理工具(1)
- git branch用法总结