定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
(1)定义产品接口
/** * 第一种系列的产品 * @author Administrator * */ interface IProduct1{ public void show(); } /** * 第二种系列的 产品 * @author Administrator * */ interface IProduct2{ public void show(); }
(2)产品的具体实现类
/** * 产品的具体实现类1 * @author Administrator * */ class Product1 implements IProduct1{ public void show() { System.out.println("product1"); } } /** * 产品的具体实现类2 * @author Administrator * */ class Product2 implements IProduct2{ public void show(){ System.out.println("product2"); } }
(3)定义工厂接口
/** * 工厂接口 * @author Administrator * */ interface IFactory { public IProduct1 createProduct1(); public IProduct2 createProduct2(); }
(6)工厂的实现类
/** * 工厂的实现类 * @author Administrator * */ class Factory implements IFactory{ /** * 创建第一种产品 */ @Override public Product1 createProduct1(){ return new Product1(); } /** * 创建第二种产品 */ @Override public Product2 createProduct2(){ return new Product2(); } }
(7)模拟客户端的使用
/** * 客户端的模拟类 * @author Administrator * */ public class Client { public static void main(String[] args){ //创建工厂 IFactory factory=new Factory(); //生产产品1 Product1 product1=(Product1) factory.createProduct1(); product1.show(); //生产产品2 Product2 product2=(Product2) factory.createProduct2(); product2.show(); } }
可以使用同一个工厂创建多个相关或者相互依赖的对象,不需要具体指明要生产对象的类,只需要说明部分特性(一部分特性由生产对象的工厂来决定)
完整代码
package com.songyan.designpattern; /** * 第一种系列的产品 * @author Administrator * */ interface IProduct1{ public void show(); } /** * 第二种系列的 产品 * @author Administrator * */ interface IProduct2{ public void show(); } /** * 产品的具体实现类1 * @author Administrator * */ class Product1 implements IProduct1{ public void show() { System.out.println("product1"); } } /** * 产品的具体实现类2 * @author Administrator * */ class Product2 implements IProduct2{ public void show(){ System.out.println("product2"); } } /** * 工厂接口 * @author Administrator * */ interface IFactory { public IProduct1 createProduct1(); public IProduct2 createProduct2(); } /** * 工厂的实现类 * @author Administrator * */ class Factory implements IFactory{ /** * 创建第一种产品 */ @Override public Product1 createProduct1(){ return new Product1(); } /** * 创建第二种产品 */ @Override public Product2 createProduct2(){ return new Product2(); } } /** * 客户端的模拟类 * @author Administrator * */ public class Client { public static void main(String[] args){ //创建工厂 IFactory factory=new Factory(); //生产产品1 Product1 product1=(Product1) factory.createProduct1(); product1.show(); //生产产品2 Product2 product2=(Product2) factory.createProduct2(); product2.show(); } }