Java设计模式之工厂方法模式
2016-06-10 14:02
483 查看
设计模式 - 工厂方法模式
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类 所谓的决定并不是批模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需知道创建的产品是哪一下,选择了使用哪个子类,就决定了实际创建的产品是什么。
工厂接口。工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品。在实际编程中,有时候也会使用一个抽象类来作为与调用者交互的接口,其本质上是一样的。
工厂实现。在编程中,工厂实现决定如何实例化产品,是实现扩展的途径,需要有多少种产品,就需要有多少个具体的工厂实现。
产品接口。产品接口的主要目的是定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。产品接口是调用者最为关心的,产品接口定义的优劣直接决定了调用者代码的稳定性。同样,产品接口也可以用抽象类来代替,但要注意最好不要违反里氏替换原则。
产品实现。实现产品接口的具体类,决定了产品在客户端中的具体行为。
Animal.java
package com.lxf.factory_MathFactory; /** * @address BeiJing * @author LiXufei * 动物抽象类 */ public abstract class Animal { //抽象方法 public abstract void get(); }
AnimalFactory.java
package com.lxf.factory_MathFactory; /** * @address BeiJing * @author LiXufei * 创建动物工厂 */ public interface AnimalFactory { //得到动物的方法 public abstract Animal createAnimal(); }
Cat.java
package com.lxf.factory_MathFactory; /** * @address BeiJing * @author LiXufei * 动物实例 - 猫 */ public class Cat extends Animal{ @Override public void get() { System.out.println("得到猫"); } }
CatFactory.java
package com.lxf.factory_MathFactory; /** * @address BeiJing * @author LiXufei * 猫工厂 */ public class CatFactory implements AnimalFactory { public Animal createAnimal() { return new Cat(); } }
Dog.java
package com.lxf.factory_MathFactory; /** * @address BeiJing * @author LiXufei * 动物实体类 - 狗 */ public class Dog extends Animal { @Override public void get() { System.out.println("得到狗"); } }
DogFactory.java
package com.lxf.factory_MathFactory; /** * @address BeiJing * @author LiXufei * 狗工厂 */ public class DogFactory implements AnimalFactory { public Animal createAnimal() { return new Dog(); } }
Test.java
package com.lxf.factory_MathFactory; /** * @address BeiJing * @author LiXufei * 测试类 */ public class Test { public static void main(String[] args) { //想要猫 CatFactory catFactory = new CatFactory(); Animal cat = catFactory.createAnimal(); cat.get(); //想要狗 DogFactory dogFactory = new DogFactory(); Animal dog = dogFactory.createAnimal(); dog.get(); } }
输出结果:
得到猫 得到狗
相关文章推荐
- Java笔记(二)类的方法
- leetcode-java-26. Remove Duplicates from Sorted Array
- 给Java说句公道话-王垠
- Java笔记(一)类与对象的基本概念
- leetcode-java-20. Valid Parentheses
- myeclipse10.7.1无法打war包 提示:securecrt alert:integrity check error
- Java知识点梳理系列(序)
- javaBean规范有哪些内容?
- Java设计模式之适配器模式
- eclipse/myeclipse 使用技巧
- java异常体系
- java中作用域public,private,protected以及不写时的区别
- Spring配置声明式事务--注解方式
- JDK1.8新特性
- java泛型
- Hibernate映射集合(JDK以及嵌入式值类)
- Java读取和写入文件
- jta+spring4+hibernate5/jpa2配置
- Java中的static关键字解析
- 序列化与反序列化