- 浏览: 138326 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 676基于前面破框架我自己也实现了一下AOP技术,AOP技术现在也很 ... -
写自己的框架,让别人笑掉大牙吧(IOC2)
2013-04-22 14:23 902上篇中主要使用配置文件来定义一些类实例之间的组织关系 ... -
写自己的框架,让别人笑掉大牙吧(IOC1)
2013-04-19 17:44 779IOC在java框架中到处可见,我们只需要创建 ... -
关于java中对象属性值的校验的思考
2013-04-15 14:09 1557现在在java 开发中经常会遇到要交验某个obje ... -
java 动态编译及执行实现Web式java开发
2012-11-29 17:05 923废话不说,让大家等了这么久,先看看截图 : 编译 ... -
JXLayer 使用简单介绍
2012-11-01 17:25 1320JXLayer 是一个很好的Swing 控件装饰类库,其主要要 ... -
关于Jtextinpt 内容的限制
2012-09-28 15:00 812在JTextInput 限制输入内容,这个一般的通过按键输入进 ... -
构造中的多态
2012-08-25 23:19 857各位仁兄,前几日我在 ... -
Swing JtableModel 使用之旅
2012-07-29 03:25 1031JTable 是我们一般展示数据的一个很好的Grid组建,个人 ... -
模版模式(TemplatePattern)
2012-07-15 11:08 797模版模式分为2个部分 1.抽象模版 2.具体模版 ... -
适配器模式(Adapter Pattern)
2012-07-08 22:49 886适配器模式是就和现实一个样子,给你一个电脑适配器,它就能 ... -
门面模式(Facade Pattern)
2012-06-10 19:37 988门面模式(Facade Pattern):门面模式在我个人感觉 ... -
代理模式例子
2012-06-04 15:07 987代理模式简单点就和现实中一样,只是代理实质性的还是别人在做。比 ... -
策略模式应对旅行中出现的问题
2012-06-04 14:21 887策略模式是针对在进行过程中出现一些问题的应对模式。一般可以分为 ... -
java 动态代理及自定义标注使用例子
2012-06-03 00:14 1237java中动态代理,在实际应用中有着很大的作用,譬如在一些类似 ... -
flex3 socket+java
2012-02-06 12:10 1089首先解决的问题是flex的沙箱问题,由于flex 连接服务器存 ... -
java 自定义注解
2012-01-30 16:09 835写道 package com.my;import j ... -
图片裁剪,缩放 批处理
2012-01-07 15:25 1024package dwr.demo; import ... -
java System.Properties
2011-10-26 13:19 749使用Properties.getProperty方法的参数也可 ... -
JDK自带的实用工具native2ascii.exe
2011-10-26 09:21 842在做Java开发的时候, ...
相关推荐
在给定的"Java 简单工厂模式例子"中,可能包含如下代码结构: ```java // Product(产品)接口或抽象类 public interface Computer { void start(); } // ConcreteProduct(具体产品)类 public class Laptop ...
java工厂模式一个简单的工厂模式例子工厂模式简单代码案例,仅供参考。java工厂模式一个简单的工厂模式例子工厂模式简单代码案例,仅供参考。java工厂模式一个简单的工厂模式例子工厂模式简单代码案例,仅供参考。...
这里我们主要探讨基于Java的例子,即简单工厂模式。 简单工厂模式的核心思想是定义一个工厂类,这个类负责创建对象,而客户端代码不再直接创建对象,而是调用工厂类的静态方法来获取所需对象。这样做可以隔离类的...
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 **1. 简单工厂模式(Simple Factory)** 简单工厂模式中,有一个中心工厂类负责创建对象。这个工厂类通常由一个静态方法构成,根据传入的...
以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...
在这个"关于简单工厂模式的一个java例子"中,我们将深入探讨这种模式的基本概念、实现方式以及它在Java编程中的应用。 简单工厂模式的核心思想是将对象的创建过程封装在一个单独的工厂类中,客户只需要知道产品类型...
java 设计模式是软件工程的基石,它们被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式可以让代码更容易被他人理解、保证代码可靠性、提高代码的重用性。 一、设计模式的分类 设计...
本文将详细介绍23种常用的设计模式,分为创建型模式、结构型模式和行为型模式三大类。 #### 二、设计模式的六大原则 1. **开闭原则**(Open-Closed Principle, OCP) - 描述:开闭原则提倡代码应该是开放扩展但...
Java工厂模式是一种设计模式,主要用于解决对象创建的问题。在编程中,当系统无法预见需要创建哪种类型的实例,或者系统不应依赖于对象如何被创建、组合和表达的细节时,工厂模式是一个很好的选择。 简单工厂模式是...
Java工厂模式是面向对象设计模式中的一个重要概念,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不直接实例化具体类,而是通过一个接口或者抽象类来间接创建。这种模式的核心在于将对象的创建过程...
工厂模式通常分为三种:简单工厂模式、工厂方法模式和抽象工厂模式。下面我们将详细探讨这三种工厂模式在Java中的实现。 **1. 简单工厂模式** 简单工厂模式是最早期的工厂模式形式,它通过一个静态工厂方法来创建...
java工厂设计模式讲解+例子,三种工厂模式的讲解,简单工厂、工厂方法、抽象工厂
在Java编程中,简单工厂模式通过一个公共的工厂类来创建对象,避免了客户端代码直接new对象,增强了代码的可维护性和扩展性。 在Java与模式之简单工厂模式中,我们首先理解其基本概念。简单工厂模式包含三个主要...
这些只是Java设计模式中的一部分例子,实际的压缩包文件可能包含了更多设计模式的详细解释和示例代码,如代理模式、装饰器模式、适配器模式等。学习并熟练应用这些设计模式,可以帮助开发者编写出更加高效、灵活且...
### Java设计模式详解 ...通过以上内容可以看出,《Java设计模式PDF》这本书不仅提供了对各种设计模式的详细介绍,而且还结合了大量的示例代码和实用建议,对于Java开发者来说是一本非常有价值的参考书。
Java简单工厂模式是一种设计模式,它是创建型模式的一种,用于将对象的创建过程封装...了解并熟练运用简单工厂模式是Java开发者进阶的必经之路,而Spring框架则是在实际项目中将工厂模式应用得淋漓尽致的一个典型例子。
在软件设计模式中,工厂模式是一种非常基础且实用的创建型模式。它的主要目的是提供一个创建对象的接口,隔离了具体类的实例化过程,使得客户端可以无须知道所创建的对象的具体类,只需要知道它是从某个特定的工厂来...
### Java工厂模式—简单工厂模式 #### 一、引言 简单工厂模式并不是GoF设计模式之一,但它作为设计模式的基础,在实际项目中被广泛使用。简单工厂模式的主要目的是将对象的创建与对象的使用分离,使代码更加灵活,...
简单工厂模式通常用于相对简单的对象创建,工厂方法模式则允许子类决定创建哪种产品,而抽象工厂模式关注于一组相关或相互依赖的对象的创建,提供一个创建对象族的接口。 "工厂模式.txt"文本文件可能进一步阐述了...
【Java 简单工厂模式】简单工厂模式是一种创建型设计模式,它的主要思想是提供一个工厂类,根据传入的参数动态地返回一个产品对象。这种模式将对象的创建与对象的使用分离,使得代码更加简洁且易于维护。 在Java中...