- 浏览: 132726 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yaoweinan:
没有.....
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
马文涛:
我也发现这个问题了,你找到解决办法了吗?
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
coding1688:
博主辛苦了,也可以参考一下这篇文章:四步轻松搞定瀑布流布局ht ...
瀑布流布局个人实现 -
yaoweinan:
嘿嘿,那个只是最笨的办法,实际上是不行的,现在一般的都有sw ...
文件上传(无刷新,带进度条,带网速)下载完整 -
javazzu:
我为啥不行呢
文件上传(无刷新,带进度条,带网速)下载完整
java中工厂模式在java ee中经常碰见,是一种常见的模式,其可分为三种:静态工厂模式、工厂方法模式、抽象工厂模式。一下做一简单讲述和例子。
静态工厂模式:顾名思义就知道他是用静态方法实现的,其创建的对象具有一定的特性,譬如说是某类的派生或者某接口的实现。其比较简单。例子如下
Animal类:
package com.bean; /** * 动物类 * @author Lyon Yao * */ public abstract class Animal { private String name; public Animal() { super(); // TODO Auto-generated constructor stub } public Animal(String name) { super(); this.name = name; } public abstract void eat(); public String getName() { return name; } public void setName(String name) { this.name = name; } }
猫类:
package com.bean; /** * 猫类 * @author Lyon Yao * */ public class Cat extends Animal { public Cat() { // TODO Auto-generated constructor stub } public Cat(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void eat() { // TODO Auto-generated method stub System.out.println("I like to eat fish!"); } }
狗类:package com.bean;
/** * 狗类 * @author Lyon Yao * */ public class Dog extends Animal { public Dog() { // TODO Auto-generated constructor stub } public Dog(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void eat() { // TODO Auto-generated method stub System.out.println("I like to eat bone!"); } }
静态工厂类:
package com.factory.sta; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; /** * 静态工厂创建一个对象 静态工厂类产生的对象一般都有共同的特性,继承某一类,或者引用接口之类,在此 * 没有看似没有,但不可否认他们都是Object或者Object的一个子类 * @author Lyon Yao * */ public class StaticFatory { public static Object getInstance(String className){ Object instance=null; try { Class cls=Class.forName(className); instance= cls.newInstance(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } return instance; } public static Object getInstance(String className,Object ...agrs) { Class cls=null; try { cls = Class.forName(className); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block return null; } Constructor[] constructors = cls.getConstructors(); Object instance=null; for(Constructor cons:constructors){ Class <?>[] clses=cons.getParameterTypes(); if(clses.length>0){ boolean isThisConstructor=true; for(int i=0;i<clses.length;i++){ Class c=clses[i]; if(! c.isInstance(agrs[i]) ){ isThisConstructor=false; } } if(isThisConstructor){ try { instance=cons.newInstance(agrs); break; } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ continue; } } } return instance; } }
工厂方法模式:其主要是对各个类型的东西分类生产,但分类生产的对象仍然是具有某一特性的。譬如说:前面的静态工厂类是一个综合造车工厂,不管是汽车还是火车都能生产,而工厂方法模式就是工厂具体分工,造汽车的工厂只造汽车,造火车的只造火车,不管造汽车还是火车但造出来的还是车。
具体代码例子如下:(这里的例子和上面的例子是一起的,具狗生好多小狗,猫生好多小猫的例子,如果不具体那么是母动物都能生的)
母动物接口:
package com.factory; import com.bean.Animal; /** * 母亲接口 * @author Lyon * */ public interface AnimalMother { /** * 生育动物 * @return */ public Animal giveBirth(); }
母狗类:
package com.factory.impl; import com.bean.Animal; import com.bean.Dog; import com.factory.AnimalMother; /** * 狗母亲 生狗 * @author Lyon Yao * */ public class DogMother implements AnimalMother { @Override public Animal giveBirth() { // TODO Auto-generated method stub Animal dog=new Dog(); System.out.println("狗母亲生了一只小狗"); return dog; } }
母猫类:
package com.factory.impl; import com.bean.Animal; import com.bean.Cat; import com.factory.AnimalMother; /** * 猫母亲 生猫咪 * @author Lyon Yao * */ public class CatMother implements AnimalMother { @Override public Animal giveBirth() { // TODO Auto-generated method stub Animal cat=new Cat(); System.out.println("猫母亲生了一只小猫眯"); return cat; } }
抽象工厂模式:前面工厂方法模式是比较具体的,是猫肯定生的是小猫,这是不会有问题的,是具体的,那么抽象工厂它所产生的就不是那么具体,产生的对象可能是没有共同特性的。譬如说 一只奶羊不仅仅能够生小羊,同时也能生产羊奶,但小羊是动物,羊奶是食物。
例子如下:
总工厂:
package com.factory; import com.bean.Milk; /** * 能产奶的 动物母亲 * 这里继承 AnimalMother 实现 生育小动物 产奶在此接口声明 构成抽象工厂总接口 * @author Lyon Yao * */ public interface MilkAnimalMother extends AnimalMother { /** * 产奶 * @return */ public Milk produceMilk(); }
奶羊:
package com.factory.impl; import com.bean.Animal; import com.bean.Milk; import com.bean.Sheep; import com.bean.SheepMilk; import com.factory.MilkAnimalMother; /** * 奶羊 * @author Lyon Yao * */ public class SheepMilkMother implements MilkAnimalMother{ @Override public Animal giveBirth() { // TODO Auto-generated method stub Animal sheep=new Sheep(); System.out.println("奶羊生了一只小羊"); return sheep; } @Override public Milk produceMilk() { // TODO Auto-generated method stub Milk milk=new SheepMilk(); System.out.println("奶羊生产了羊奶"); return milk; } }
奶牛:
package com.factory.impl; import com.bean.Animal; import com.bean.Cattle; import com.bean.CattleMile; import com.bean.Milk; import com.factory.MilkAnimalMother; /** * 奶牛() * @author Lyon Yao * */ public class CattleMilkMother implements MilkAnimalMother { @Override public Animal giveBirth() { // TODO Auto-generated method stub Cattle cattle=new Cattle(); System.out.println("奶牛生了一只小牛"); return cattle; } @Override public Milk produceMilk() { // TODO Auto-generated method stub Milk milk=new CattleMile(); System.out.println("奶牛生产了牛奶"); return milk; } }
下面是测试例子:
package com.test; import org.junit.Test; import com.bean.Animal; import com.bean.Cat; import com.bean.Dog; import com.factory.AnimalMother; import com.factory.MilkAnimalMother; import com.factory.impl.CatMother; import com.factory.impl.CattleMilkMother; import com.factory.impl.DogMother; import com.factory.impl.SheepMilkMother; import com.factory.sta.StaticFatory; /** * 测试类 * * @author Lyon Yao * */ public class TestCase { /** * 静态工厂类 测试 */ @Test public void staticFactoryTest() { Animal ani1=(Animal) StaticFatory.getInstance(Cat.class.getName()); System.out.println(ani1.getName()); ani1.eat(); ani1=(Animal) StaticFatory.getInstance(Dog.class.getName(),"dog"); System.out.println(ani1.getName()); ani1.eat(); } /** * 工厂方法模式测试 */ @Test public void methodFactoryTest(){ AnimalMother mother=new CatMother(); mother.giveBirth(); mother=new DogMother(); mother.giveBirth(); } /** * 抽象工厂模式测试 */ @Test public void abstrFactoryTest(){ MilkAnimalMother mother=new SheepMilkMother(); mother.giveBirth(); mother.produceMilk(); mother=new CattleMilkMother(); mother.giveBirth(); mother.produceMilk(); } }
控制台输出:
null
I like to eat fish!
dog
I like to eat bone!
猫母亲生了一只小猫眯
狗母亲生了一只小狗
奶羊生了一只小羊
奶羊生产了羊奶
奶牛生了一只小牛
奶牛生产了牛奶
例子可能比较牵强,各位见笑了。
发表评论
-
写自己的框架,让别人笑掉大牙吧(AOP)
2013-04-30 12:50 622基于前面破框架我自己也实现了一下AOP技术,AOP技术现在也很 ... -
写自己的框架,让别人笑掉大牙吧(IOC2)
2013-04-22 14:23 858上篇中主要使用配置文件来定义一些类实例之间的组织关系 ... -
写自己的框架,让别人笑掉大牙吧(IOC1)
2013-04-19 17:44 748IOC在java框架中到处可见,我们只需要创建 ... -
关于java中对象属性值的校验的思考
2013-04-15 14:09 1506现在在java 开发中经常会遇到要交验某个obje ... -
java 动态编译及执行实现Web式java开发
2012-11-29 17:05 886废话不说,让大家等了这么久,先看看截图 : 编译 ... -
JXLayer 使用简单介绍
2012-11-01 17:25 1271JXLayer 是一个很好的Swing 控件装饰类库,其主要要 ... -
关于Jtextinpt 内容的限制
2012-09-28 15:00 754在JTextInput 限制输入内容,这个一般的通过按键输入进 ... -
构造中的多态
2012-08-25 23:19 815各位仁兄,前几日我在 ... -
Swing JtableModel 使用之旅
2012-07-29 03:25 989JTable 是我们一般展示数据的一个很好的Grid组建,个人 ... -
模版模式(TemplatePattern)
2012-07-15 11:08 750模版模式分为2个部分 1.抽象模版 2.具体模版 ... -
适配器模式(Adapter Pattern)
2012-07-08 22:49 845适配器模式是就和现实一个样子,给你一个电脑适配器,它就能 ... -
门面模式(Facade Pattern)
2012-06-10 19:37 922门面模式(Facade Pattern):门面模式在我个人感觉 ... -
代理模式例子
2012-06-04 15:07 938代理模式简单点就和现实中一样,只是代理实质性的还是别人在做。比 ... -
策略模式应对旅行中出现的问题
2012-06-04 14:21 809策略模式是针对在进行过程中出现一些问题的应对模式。一般可以分为 ... -
java 动态代理及自定义标注使用例子
2012-06-03 00:14 1158java中动态代理,在实际应用中有着很大的作用,譬如在一些类似 ... -
flex3 socket+java
2012-02-06 12:10 1026首先解决的问题是flex的沙箱问题,由于flex 连接服务器存 ... -
java 自定义注解
2012-01-30 16:09 793写道 package com.my;import j ... -
图片裁剪,缩放 批处理
2012-01-07 15:25 983package dwr.demo; import ... -
java System.Properties
2011-10-26 13:19 710使用Properties.getProperty方法的参数也可 ... -
JDK自带的实用工具native2ascii.exe
2011-10-26 09:21 805在做Java开发的时候, ...
相关推荐
Java 简单工厂模式例子,Eclipse直接引入就可以使用
java工厂模式一个简单的工厂模式例子工厂模式简单代码案例,仅供参考。java工厂模式一个简单的工厂模式例子工厂模式简单代码案例,仅供参考。java工厂模式一个简单的工厂模式例子工厂模式简单代码案例,仅供参考。...
设计模式--工厂模式java例子
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
个人写的java工厂模式例子描述,很不错的,给大家共香
java工厂设计模式讲解+例子,三种工厂模式的讲解,简单工厂、工厂方法、抽象工厂
Java简单的工厂模式 介绍Java工厂模式的简单例子,注释写得不是很多,请耐心看。
1.简单工厂模式(simple factory)2.工厂方法模式(factory mathoud)3.抽象工厂模式(abstract factory)
很多同学对工厂模式有些模糊,我这有一个小小的例子 希望能给你带来点帮助。
Java工厂模式的一个例子,使用配置文件来决定具体生成的实例,拓展性强
以JAVA为例,汇总了十几种常用的设计模式,包括了:单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、外观模式、命令模式、观察者模式、状态模式、策略模式、模板方法模式等。仅供学习使用。 相关文章请看...
工厂模式例子java代码
本实例是java做的工厂模式例子,网上大多只有文章,没有源码,我根据那些文字抽空做了简单工厂模式,工厂模式,抽象工厂三个例子。压缩包里工有三个文件夹,factory1,factory2,factory3,分别是简单工厂模式,工厂模式...
Java设计模式04简单工厂模式.pdf
java编写的组合模式例子,建造一个工厂
设计模式_创建类_5种模式Java的实际例子_注释详细 包括 1、单例模式(Singleton) 2、工厂方法(Factory Method) 3、抽象工厂(Abstract Factory) 4、建造模式(Builder) 5、原型模式(Prototype)
工厂模式dao模式操作数据库小例子 本例子适合刚学完java一点基础部分,想利用下工厂模式还有dao设计模式简单操作数据库的看一下
本人大四,根据老师要求写的一份抽象工厂模式的例子。你们下载下来导入myclipse中即可使用。其中在测试Test.java中,你们可以看看运行效果
java23种设计模式+23个实例demo: 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写出, 2. 每个Pattern均是一个目录,其目录名即是Pattern的名字, 所有代码用JDeveloper 9i 和JBuilder 6.0编写...
Java常用设计模式包括工厂模式、单链模式。很实用,有例子。。。。