简单工厂模式(Simple Factory)

一.结构图


 

二.角色

    从上图不难看出,简单工厂模式涉及到工厂角色,抽象产品角色,以及具体的产品角色:

    工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑.工厂类在客户端的直接调用下创建产品对象,它通常由一个具体的JAVA类实现.

    抽象产品(Product)角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们共同拥有的接口,抽象产品角色可以用一个java接口或java抽象类实现.

    具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体的java类实现.

 

三,简单示例:

  Creator.java

public class Creator{
    /**
     * 静态工厂方法
   */
    public static Product factory(){
         return new ConcreteProduct();
   }
}

 

Product.java

public interface Product{

}

 

ConcreteProduct.java

public class ConcreteProduct implements Product{
     public ConcreteProduct(){
    
    }
}

 

 

 

一个较完整的例子:



 

 

/**********************************************
  * @author  Simon Hoo (simon@cottsoft.com)
  * @contact QQ:9930323 MSN: simon_hoo@msn.com
  * @OnlineSupport: http://www.CottSoft.com
  * @Create  2011-1-16
  * @version V1.0
  ********************************************/

package com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory;

import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.exception.AppException;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try{
			Factory.factory("m").purchaseMaterials();
			Factory.factory("m").createProducts();
			Factory.factory("m").salesProducts();
			System.out.println("******************");
			Factory.factory("p").purchaseMaterials();
			Factory.factory("p").createProducts();
			Factory.factory("p").salesProducts();
			System.out.println("******************");
			Factory.factory("f").purchaseMaterials();
			Factory.factory("f").createProducts();
			Factory.factory("f").salesProducts();
			System.out.println("******************");
		}catch(AppException ae){
			ae.printStackTrace();
		}
	}

}

 

 

/**********************************************
  * @author  Simon Hoo (simon@cottsoft.com)
  * @contact QQ:9930323 MSN: simon_hoo@msn.com
  * @OnlineSupport: http://www.CottSoft.com
  * @Create  2011-1-16
  * @version V1.0
  ********************************************/

package com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory;

public interface ISimpleFactory {
	public void purchaseMaterials();
	public void createProducts();
	public void salesProducts();
}

 

 

/**********************************************
  * @author  Simon Hoo (simon@cottsoft.com)
  * @contact QQ:9930323 MSN: simon_hoo@msn.com
  * @OnlineSupport: http://www.CottSoft.com
  * @Create  2011-1-16
  * @version V1.0
  ********************************************/

package com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory;

import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.exception.AppException;
import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.impl.FruitFactories;
import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.impl.MobileFactories;
import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.impl.PlaneFactories;

public class Factory {
	
	/**
	 * 静态工厂方法
	 * @param which
	 * @return
	 * @throws AppException
	 */
	public static ISimpleFactory factory(String which) throws AppException{
		if(which.equalsIgnoreCase("m")){
			return new MobileFactories("Nokia");
		}else if (which.equalsIgnoreCase("p")){
			return new PlaneFactories("A380");
		}else if(which.equalsIgnoreCase("f")){
			return new FruitFactories("苹果");
		}else {
			throw new AppException("找不到你所生产产品的工厂.");
		}
	}
}

 

 

/**********************************************
  * @author  Simon Hoo (simon@cottsoft.com)
  * @contact QQ:9930323 MSN: simon_hoo@msn.com
  * @OnlineSupport: http://www.CottSoft.com
  * @Create  2011-1-16
  * @version V1.0
  ********************************************/

package com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.impl;

import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.ISimpleFactory;

public class FruitFactories implements ISimpleFactory {
	private String fruitName;
	
	public FruitFactories(String fruitName){
		this.fruitName = fruitName;
	}
	
	@Override
	public void createProducts() {
		System.out.println("种植"+fruitName);
	}

	@Override
	public void purchaseMaterials() {
		System.out.println("购买用于种植"+fruitName+"的种子.");
	}

	@Override
	public void salesProducts() {
		System.out.println("销售"+fruitName);
	}

	public String getFruitName() {
		return fruitName;
	}

	public void setFruitName(String fruitName) {
		this.fruitName = fruitName;
	}

}

 

 

/**********************************************
  * @author  Simon Hoo (simon@cottsoft.com)
  * @contact QQ:9930323 MSN: simon_hoo@msn.com
  * @OnlineSupport: http://www.CottSoft.com
  * @Create  2011-1-16
  * @version V1.0
  ********************************************/

package com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.impl;

import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.ISimpleFactory;

public class MobileFactories implements ISimpleFactory {
	private String mobileLogo;
	
	public MobileFactories(String mobileLogo){
		this.mobileLogo=mobileLogo;
	}
	@Override
	public void createProducts() {
		// 生产产品:手机
		System.out.println("生产["+mobileLogo+"]牌子的手机!");
	}

	@Override
	public void purchaseMaterials() {
		// 购买生产手机的原材料
		System.out.println("购买生产["+mobileLogo+"]牌子的手机原材料");
	}

	@Override
	public void salesProducts() {
		// TODO Auto-generated method stub
		System.out.println("销售["+mobileLogo+"]牌子的手机.");
	}

	public String getMobileLogo() {
		return mobileLogo;
	}

	public void setMobileLogo(String mobileLogo) {
		this.mobileLogo = mobileLogo;
	}

}

 

 

/**********************************************
  * @author  Simon Hoo (simon@cottsoft.com)
  * @contact QQ:9930323 MSN: simon_hoo@msn.com
  * @OnlineSupport: http://www.CottSoft.com
  * @Create  2011-1-16
  * @version V1.0
  ********************************************/

package com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.impl;

import com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.ISimpleFactory;

public class PlaneFactories implements ISimpleFactory {
	private String planeType;
	
	public PlaneFactories(String planeType){
		this.planeType=planeType;
	}
	
	@Override
	public void createProducts() {
		System.out.println("生产"+planeType+"飞机");
	}

	@Override
	public void purchaseMaterials() {
		System.out.println("购买用于生产"+planeType+"飞机的发动机.");
	}

	@Override
	public void salesProducts() {
		System.out.println("销售"+planeType+"飞机");
	}

	public String getPlaneType() {
		return planeType;
	}

	public void setPlaneType(String planeType) {
		this.planeType = planeType;
	}

}

 

 

/**********************************************
  * @author  Simon Hoo (simon@cottsoft.com)
  * @contact QQ:9930323 MSN: simon_hoo@msn.com
  * @OnlineSupport: http://www.CottSoft.com
  * @Create  2011-1-16
  * @version V1.0
  ********************************************/

package com.cottsoft.design_pattern.p01_creational_pattern.p01_simple_factory.exception;

public class AppException extends Exception {
	public AppException(String msg){
		super(msg);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值