`
simonhoo
  • 浏览: 70406 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

简单工厂模式(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);
	}
}

 

  • 大小: 17.7 KB
  • 大小: 25.7 KB
分享到:
评论

相关推荐

    java工厂模式SimpleFactory

    总的来说,Java工厂模式SimpleFactory是一种实用的设计模式,能够帮助我们更好地管理对象的创建过程,提高代码的可维护性和可扩展性。通过将对象的创建过程封装在工厂类中,我们可以在不修改客户端代码的情况下,...

    java 设计模式 Facade外观模式 Simple Factory 简单工厂模式

    在Java中,简单工厂模式适用于对象的创建过程较为固定或不复杂的情况。它定义一个公共的工厂类,根据传入的参数或者条件来决定返回哪个具体类的实例。这种方式降低了代码的耦合度,使得在不修改客户端代码的情况下,...

    JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)

    **简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...

    设计模式 创建型模式 Simple Factory模式(简单工厂)

    Simple Factory模式: 定义创建对象的接口,并封装对象的创建。 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者接口。这样的话,我们将会面临一个...

    Simple Factory Pattern.rar【GoF的简单工厂模式(C#源码)】

    简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常它根据自变量的...SimpleFactory作为Creator。我已经用C#的源码编程了:请下载Simple Factory Pattern.rar

    SimpleFactory

    "SimpleFactory" 是设计模式中的一种,通常称为简单工厂模式。它属于创建型设计模式,主要目的是提供一个创建对象的公共接口,让客户端可以不关心具体对象的创建过程,只需要知道所需对象的类型即可。这种模式简化了...

    工厂模式FactoryMode

    在Java中,工厂模式有三种主要形式:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式:也称为静态工厂模式,它通过一个静态方法来创建对象。在这个模式中,工厂类负责决定实例化哪个产品类。这种模式...

    简单工厂模式,工厂方法模式,抽象工厂模式

    简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的工厂类来创建对象。这个工厂类通常包含一个或多个静态方法,用于根据输入参数创建不同类型的实例。这种模式的优点在于客户端代码无需...

    Factory_Method&&Simple_Factory

    简单工厂模式(Simple Factory Pattern)是工厂方法模式的一个简化版本,它没有定义工厂接口,只有一个具体工厂类负责创建所有对象。简单工厂模式适用于产品种类较少,且不会频繁改变的情况。 在实际应用中,工厂...

    Java设计模式之工厂模式(Factory)

    1. **简单工厂模式(Simple Factory)**:适用于需求较为简单的情况,主要负责创建一系列相关的对象。 2. **工厂方法模式(Factory Method)**:用于处理不同类型的对象创建过程,提供了一种接口来创建一系列相关或...

    简单工厂模式

    简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,降低了系统与具体创建对象之间的耦合度。在这个设计模式课程资料中,我们将使用Java语言来阐述和实现简单工厂模式,并在...

    设计模式 t01SimpleFactory

    "t01SimpleFactory"指的是简单工厂(Simple Factory)设计模式,它是创建型设计模式之一。 简单工厂模式的核心思想是通过一个公共的工厂类来创建对象,这个工厂类负责实例化客户所需的对象,客户只需要知道具体的...

    工厂模式(简单工厂,普通工厂,抽象工厂)代码java

    - 在`SimpleFactory`文件中,我们可以看到一个简单的工厂类,它根据输入类型创建相应的对象。这种模式适用于对象种类较少且不常变动的情况。 2. **普通工厂模式**(工厂方法模式): - 工厂方法模式将对象的创建...

    设计模式之Factory

    Factory模式通常分为简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)三种主要类型。 1. **简单工厂**:这是最简单的形式,它包含一个静态方法,根据传入的参数返回特定类型...

    工厂模式(Factory)

    1. **简单工厂模式(Simple Factory Pattern)**:由一个静态方法来创建产品对象,它是最简单的工厂模式形式,但不利于扩展,因为静态方法不能被继承。 2. **工厂方法模式(Factory Method Pattern)**:定义一个...

    简单工厂模式应用

    简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种类型的设计模式属于类创建模式,因为工厂类是基于类的。在简单工厂模式中,一个工厂类根据传入的参数来决定创建...

    反射简单工厂模式工厂模式

    `simplefactory`文件可能包含一个简单的工厂类,它负责根据输入条件(如参数)返回相应类型的实例。这种模式将对象的创建与使用分离,使得客户端代码无需关注具体对象的创建过程,从而提高了代码的可读性和可维护性...

    简单工厂模式与工厂模式和抽象工厂模式.doc

    1. **简单工厂模式(Simple Factory Pattern)** 简单工厂模式是一种最基础的工厂模式,也被称为静态工厂方法模式。它通过一个静态方法来创建对象,这个静态方法就是工厂,根据传入的参数或者条件来决定创建哪个...

    simplefactory.zip

    在我们的“simplefactory.zip”文件中,我们可以看到一个简单的工厂模式实现示例。这个例子可能包括以下几个部分: - 一个接口,例如`Product`,定义了产品类的基本行为。 - 若干个实现`Product`接口的具体产品类,...

Global site tag (gtag.js) - Google Analytics