java 工厂模式变形的多种应用

工厂模式在项目开发中是使用效率非常高的,意思就是说定义一个用于创建对象的接口,让子类去决定实例化哪一个类。这就是一个工厂类的示意图

接着来一个简单的例子:

如上图所示,我们首先定义我们的产品抽象类接口,也可以是抽象类:

package factory;

public abstract class PlatForm {
	public void search(){
		System.out.println("你搜索的结果是。。。。。。");
	}

	public abstract void music();
}

下面是一些实现类

package factory;

public class BaiduProduct extends PlatForm{

	@Override
	public void music() {
		System.out.println("baidu music");
	}

}
package factory;

public class Qihu360Product extends PlatForm{

	@Override
	public void music() {
		System.out.println("360 music");
	}

}
package factory;

public class SogouProduct extends PlatForm{

	@Override
	public void music() {
		System.out.println("sogou music");
	}

}

三个实现类已经完成,下面我们要来一个工厂的抽象类

package factory;

public abstract class Creator {
	/**
	 * 创建一个产品对象,其中T 可以为 String Enum Class等  参数可以自己设置
	 * @param c
	 * @return
	 */
	public abstract <T extends PlatForm> T createProduct(Class<T> c);
}

下面是实现类

package factory;

public class ConcrentCreator extends Creator{

	@Override
	public <T extends PlatForm> T createProduct(Class<T> c) {
		PlatForm plat = null;
		try {
			/**
			 * 创建一个用于创建对象的接口,让子类去确定实例化哪一个对象。工厂方法,让一个类的实例化延迟到子类
			 */
			plat = (PlatForm) Class.forName(c.getName()).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return (T) plat;
	}

}
package factory;

public class Client {
	public static void main(String[] args) {
		Creator creator = new ConcrentCreator();
		//在这里可以把你要实例化的类给传进去,然后即可调用你想要的方法。
		PlatForm plat = creator.createProduct(BaiduProduct.class);
		plat.search();
		plat.music();
	}
}

在这里面模仿了一个客户端,就可以输出你想要的结果。

在工厂模式方法中抽象产品类负责定义产品的共性,实现实物最抽象的定义;creator为产品抽喜创建类,也就是抽象工厂具体如何创建产品类有具体的实现creator的工厂类来完成,工厂类的变种很多,下面,我总结类一个比较通用的源码。

1:抽象产品类

package factory.total;

public abstract class Product {
	public void method1(){
		//所有产品的共性
	}
	//抽象方法   具体有继承它的类去实现
	public abstract void method2();
}

2:产品实现类

package factory.total;

public class ConcretProduct1 extends Product{

	@Override
	public void method2() {
		//TODO
	}

}

package factory.total;

public class ConcretProduct2 extends Product{

	@Override
	public void method2() {
		//TODO
	}

}

3:抽象工厂类

package factory.total;

public abstract class Creator {
	public abstract <T extends Product> T createMethod(Class<T> c);

}

4:具体工厂类:

package factory.total;

public class ConcreteCreator extends Creator{

	@Override
	public <T extends Product> T createMethod(Class<T> c) {
		Product pro = null;
		try {
			pro = (Product) Class.forName(c.getName()).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return (T) pro;
	}

}

场景模拟类

package factory.total;

public class Client {
	public static void main(String[] args) {
		Creator creator = new ConcreteCreator();
		Product pro = creator.createMethod(ConcretProduct1.class);
		pro.method1();
		pro.method2();
	}
}

其中工厂模式又分为简单工厂模式,和多级工厂模式,不过这两种情况,和上一种都比较类似了,其中简单工厂模式只是简单的把抽象工厂类去掉,然后把工厂实现类的方法改成static方法。多级工厂模式是指:例如当我们见到一个比较复杂的项目时,所有的产品类都放到一个工厂类中去初始化会显得结构不清晰,那么我们现在就为每一种产品都有自己的一个工厂类;下面我会给出实例多级工厂类的应用。

我是有些基础类还是使用以前的,只不过为每个产品增加了一个工厂类

1:抽象工厂类:

package factory.more;

public abstract class AbstractPlatFactory {
	public abstract PlatForm createPlat();
}

2:具体工厂类:

package factory.more;

public class BaiduFactory extends AbstractPlatFactory{

	@Override
	public PlatForm createPlat() {
		// TODO Auto-generated method stub
		return new BaiduProduct();
	}

}
package factory.more;

public class Qihu360Factory extends AbstractPlatFactory{

	@Override
	public PlatForm createPlat() {
		return new Qihu360Product();
	}

}
package factory.more;

public class SogouFactory extends AbstractPlatFactory{

	@Override
	public PlatForm createPlat() {
		return new SogouProduct();
	}

}

场景类:

package factory.more;

public class Client {
	public static void main(String[] args) {
		 PlatForm plat = new BaiduFactory().createPlat();
		 plat.search();
		 plat.music();
	}
}

这是多级工厂类的使用,

实际上还有抽象工厂类的应用,它是指为相关对象提供一组接口,无需指定他们的具体类。(今天太晚了,以后有时间会接着说的)

java 工厂模式变形的多种应用

时间: 2024-08-26 14:47:51

java 工厂模式变形的多种应用的相关文章

Java工厂模式

Java工厂模式 看了这么多关于工厂模式的解说,还是认为这篇文章讲的好理解,贴出来和大家分享分享. 一.引子 话说十年前,有一个****户,他家有三辆汽车--Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.只是,****户坐车时总是怪怪的:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上Audi说"开奥迪车!".你一定说:这人有病!直接说开车不即可了?! 而当把这个****户的行为放到我们程序设计中来时,会发

Java工厂模式(Factory模式)

工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量. 我们以类Sample为例,

Java 工厂模式学习

工厂模式分三种:简单工厂.工厂方法.抽象工厂.其中抽象工厂是用于多个产品族的情况.所谓产品族就是不同产品组成的有机整体,各不同产品之间相互依赖.打个比方,一台电脑有CPU.主板.内存和硬盘等,这些不同产品组成了一个产品族.就好比Dell和HP要把这些产品进行不同的组装,这时就需要用到抽象工厂.以下是代码演示: 简单工厂,可以用反射实现: 首先定义产品的抽象接口 package com.demo.SimpleFactory; public interface CPU { public void r

自己理解的java工厂模式,希望对大家有所帮助

[http://www.360doc.com/content/11/0824/17/3034429_142983837.shtml] 这两天突然想学学java源代码,不过看到一篇文章说看java源代码要先看设计模式,这样更容易理解源代码的结构,所以就准备学学java设计模式,首先当然是看java创建模式的工厂模式了,刚开始直接看抽象工厂模式是什么意思,百度百科的实在是看不懂,后来又在网上看了看其他的文章,仔细思考后,还算是理解了,现在跟大家分享下. 首先说说简单工厂模式,我用现实中的汽车工厂举例

Java工厂模式(简单工厂、工厂方法、抽象工厂)

工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂(Abstract Factory). 简单工厂(Simple Factory)又叫静态工厂,是工厂模式三中状态中结构最为简单的.主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例.我们来看一个具体的例子:假设一家工厂,几生产洗衣机,有生产冰箱

JAVA 工厂模式(转载)

一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品:             这三种模式从上到下逐步抽象,并且更具一般性.             GOF在<

Java—工厂模式

工厂模式: public interface Cookie { public abstract void run (); } public abstract class CookieFactory { abstract Cookie create(); } public class BearCookie implements Cookie{ public void run (){ System.out.println("正在制作小熊饼干"); } } public class Numb

JAVA 工厂模式:简单工厂

简单工厂模式(SimpleFactory Pattern): 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 1. 汽车接口 package com.lf.shejimoshi.Factory; /** * @classDesc: 类描述:(汽车接口) * @author baobaolan * @createTim

java工厂模式Factory

工厂模式: 1)我们首先要设计车汽车需要那些流程(face) package light.zhang.model.model.facotry; /** * 车子建造过程,定义好流程 * @author witts * */ public interface ICarface { /** * 绘制图片 */ void drawImage(); /** * 设计模型 */ void createModel(); /** * 实现生产 */ void implCar(); /** * 测试车子 */