设计模式---工厂方法模式
Posted 顺蝈蝈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式---工厂方法模式相关的知识,希望对你有一定的参考价值。
1、简介:工厂方法模式是类的创建模式,又叫虚拟构造子模式或是多态性工厂模式,它的实现方式是创建一个工厂接口,将实际创建对象的的工作转移到工厂子类中,在系统的扩展中,可以在不修改工厂角色的情况下引进新的产品。
2、工厂方法模式UML
3、工厂方法模式情景示意性类图
4、类图分析
从以上两个图可以看出,工厂方法模式涉及到以下四个角色
4、1:抽象工厂:担任这个角色的是工厂方法模式的核心,它与应用无关,任何在模式中创建对象的工厂都必须实现这个接口,在实际应用中,这个角色由java抽象类或接口来实现
4、2:具体工厂:担任这个角色的是抽象工厂的具体实现类,具体工厂含有业务逻辑,并受到客户端的调用创建产品对象,这个角色由java类来实现。
4、3:抽象产品:这个角色是工厂方法模式创建的对象的超类型(父类),在实际应用中,由java抽象类或是接口来实现
4、4:具体产品:这个角色实现了抽象产品角色声明的接口,工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。
5、源代码
5.1:创建一个商品接口
package FactoryMethod; /** * ******************************************************** * @ClassName: ProductInterface * @Description: 产品接口,所有产品都必须实现此接口 * ********************************************************** */ public interface Product { public void say(); }
5.2:创建一个食品类 实现商品接口
package FactoryMethod; /** * ******************************************************** * @ClassName: Food * @Description: 食品类 * ********************************************************** */ public class Food implements Product{ @Override public void say() { System.out.println("我是食品"); } }
5.3:创建一个水果类 实现商品接口
package FactoryMethod; /** * ******************************************************** * @ClassName: Fruits * @Description: 水果类 * ********************************************************** */ public class Fruits implements Product{ @Override public void say() { System.out.println("我是水果"); } }
5.4:创建工厂接口,所有具体工厂角色必须实现这个接口
package FactoryMethod; /** * ******************************************************** * @ClassName: FactoryInterface * @Description: 工厂接口,所有具体工厂角色必须实现此接口 * ********************************************************** */ public interface FactoryInterface { public Product factory(); }
5.5:创建食品工厂类,实现工厂接口
package FactoryMethod; /** * ******************************************************** * @ClassName: FoodFactory * @Description: 食品工厂类 * ********************************************************** */ public class FoodFactory implements FactoryInterface{ @Override public Product factory() { // TODO Auto-generated method stub return new Food(); } }
5.6:创建水果工厂类,实现工厂接口
package FactoryMethod; /** * ******************************************************** * @ClassName: FruitsFactory * @Description: 水果工厂类 * ********************************************************** */ public class FruitsFactory implements FactoryInterface{ @Override public Product factory() { // TODO Auto-generated method stub return new Fruits(); } }
5.7:创建工厂方法模式测试客户端
package FactoryMethod; /** * ******************************************************** * @ClassName: FactoryMethodTest * @Description: 工厂方法模式测试类 * ********************************************************** */ public class FactoryMethodTest { public static void main(String[] args) { //获取食品工厂对象 FactoryInterface foodFactory = new FoodFactory(); //获取水果工厂对象 FactoryInterface fruitsFactory = new FruitsFactory(); //获取食品对象 Product food = foodFactory.factory(); //获取水果对象 Product fruits =fruitsFactory.factory(); //调用对象中的方法 food.say(); fruits.say(); } }
5.8:运行,得到如下结果
以上是关于设计模式---工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章