工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
工厂方法的简单实现
(1)创建简单的产品接口
/** * 创建产品接口 * @author Administrator * */ interface Fruit{ //产品的共性方法 public void productMethod(); }
(2)创建具体的产品实现类
/** * 创建产品类 * @author Administrator * */ class Apple implements Fruit{ /** * 产品方法的具体实现 */ @Override public void productMethod() { System.out.println("apple"); } }
/** * 创建产品类 * @author Administrator * */ class Banana implements Fruit{ /** * 产品方法的具体实现 */ @Override public void productMethod() { System.out.println("banana"); } }
(3)创建工厂接口
/** * 工厂接口 * @author Administrator * */ interface FruitFactory{ /** * 生产产品 * @return */ public Fruit createProduct(String type); }
(4)创建具体的工厂
/** * 具体的工厂类 * @author Administrator * */ class SouthFactory implements FruitFactory { /** * 生产产品 */ @Override public Fruit createProduct(String type) { Fruit fruit= null; if("apple".equals(type)) { fruit=new Apple(); } else if("banana".equals(type)) { fruit=new Banana(); } return fruit; } }
/** * 具体的工厂类 * @author Administrator * */ class NorthFactory implements FruitFactory { /** * 生产产品 */ @Override public Fruit createProduct(String type) { Fruit fruit= null; if("apple".equals(type)) { fruit=new Apple(); } else if("banana".equals(type)) { fruit=new Banana(); } return fruit; } }
(5)模拟客户端的实现
/** * 模拟客户端 * @author Administrator * */ public class Client{ public static void main(String[] args) { //创建工厂对象 FruitFactory factory =new SouthFactory(); //生产产品 Fruit product=factory.createProduct("apple"); //调用产品的方法 product.productMethod(); } }
如果客户想得到一个南方的苹果,则需要告诉南方工厂,要一个苹果即可。
第一步:建立南方的工厂
第二步:有南方的工厂创建一个苹果
第三步:即可调用苹果中的产品了~
完整代码(完整代码中可以把这些类接口全放在一个java文件中,方便观察,当然,放在多个文件中也是可以的)
package com.songyan.designpattern; /** * 创建产品接口 * @author Administrator * */ interface Fruit{ //产品的共性方法 public void productMethod(); } /** * 创建产品类 * @author Administrator * */ class Apple implements Fruit{ /** * 产品方法的具体实现 */ @Override public void productMethod() { System.out.println("apple"); } } /** * 创建产品类 * @author Administrator * */ class Banana implements Fruit{ /** * 产品方法的具体实现 */ @Override public void productMethod() { System.out.println("banana"); } } /** * 工厂接口 * @author Administrator * */ interface FruitFactory{ /** * 生产产品 * @return */ public Fruit createProduct(String type); } /** * 具体的工厂类 * @author Administrator * */ class SouthFactory implements FruitFactory { /** * 生产产品 */ @Override public Fruit createProduct(String type) { Fruit fruit= null; if("apple".equals(type)) { fruit=new Apple(); } else if("banana".equals(type)) { fruit=new Banana(); } return fruit; } } /** * 具体的工厂类 * @author Administrator * */ class NorthFactory implements FruitFactory { /** * 生产产品 */ @Override public Fruit createProduct(String type) { Fruit fruit= null; if("apple".equals(type)) { fruit=new Apple(); } else if("banana".equals(type)) { fruit=new Banana(); } return fruit; } } /** * 模拟客户端 * @author Administrator * */ public class Client{ public static void main(String[] args) { //创建工厂对象 FruitFactory factory =new SouthFactory(); //生产产品 Fruit product=factory.createProduct("apple"); //调用产品的方法 product.productMethod(); } }