- 浏览: 182124 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (99)
- 备忘录 (48)
- linux (19)
- oracle (10)
- shell (8)
- awk (1)
- java (48)
- just do it (29)
- more and more (46)
- common (29)
- 设计模式 (8)
- Java Web (9)
- Spring (0)
- Structs 2 (2)
- Java 高级 (4)
- 存储 (3)
- Virtual Box (1)
- ant (1)
- maven (0)
- 数据结构 (5)
- 算法 (5)
- javascript (1)
- ajax (1)
- jquery (1)
- xml (1)
- IBM (3)
- 转载 (3)
- English (2)
- html&css (0)
- hibernate (2)
- mysql (1)
- memcached (1)
最新评论
-
飞出四季做的茧:
kris_zhang 写道int temp = 0 ; ...
Java IO流 Zip文件的压缩和解压缩 -
kris_zhang:
int temp = 0 ; while(( ...
Java IO流 Zip文件的压缩和解压缩 -
welcomezhang:
学习了,这块自己还得深挖下
为什么HashMap不是线程安全的 -
fomeiherz:
这个写的最详细了,赞一个
Java的泛型类和泛型方法 -
beijishiqidu:
hanmiao 写道http://yangguangfu.it ...
Java设计模式之策略模式
一、什么是简单工厂模式?
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,一般都是实现一个接口,而这个接口又被这个工厂所依赖。
二、模式中包含的角色及其职责
1.工厂(Factory)角色 简单工厂模式的核心,它负责实现创建所有实例。工厂类可以被外界直接调用,创建所需的产品对象,里面的方法一般被声明为静态的。
2.抽象(Interface)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.产品(Instance)角色 简单工厂模式所创建的具体实例对象
三、简单工厂模式的优缺点?
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。
下面给出一个例子。
UML图:
抽象产品:
具体产品:
工厂类:
常量类:
测试类:
运行结果:
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,一般都是实现一个接口,而这个接口又被这个工厂所依赖。
二、模式中包含的角色及其职责
1.工厂(Factory)角色 简单工厂模式的核心,它负责实现创建所有实例。工厂类可以被外界直接调用,创建所需的产品对象,里面的方法一般被声明为静态的。
2.抽象(Interface)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.产品(Instance)角色 简单工厂模式所创建的具体实例对象
三、简单工厂模式的优缺点?
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。
下面给出一个例子。
UML图:
抽象产品:
package com.fit.model.simplefactory; /*********************************************************************** * Module: Fruit.java * Author: Administrator * Purpose: Defines the Interface Fruit ***********************************************************************/ /** * administrator * * @pdOid 0dd5af50-92ad-43fc-8d59-b5a781d3073e */ public interface Fruit { /** @pdOid a059f30b-1f0b-47dd-9117-db5037174c98 */ static final int age = 0; /** @pdOid a2a57592-b8e1-46f5-9a27-24f002f501eb */ void growth(); /** @pdOid 3044454a-da2d-4f8f-a66e-f674f61a3ff3 */ void plant(); /** @pdOid 8fd74b01-62fa-416f-a2b4-915c0c37f73a */ void harvest(); }
具体产品:
package com.fit.model.simplefactory; /*********************************************************************** * Module: Apple.java * Author: Administrator * Purpose: Defines the Class Apple ***********************************************************************/ /** @pdOid df35b5a7-6f12-4e67-8f49-002b1660d7f6 */ public class Apple implements Fruit { /** @pdOid 1acc35df-64cb-443a-8534-3a138a8b6b01 */ public void growth() { // TODO: implement } /** @pdOid 0ce1b92d-7e41-4369-b40c-ff0c7f543804 */ public void plant() { System.out.println("种植了苹果"); } /** @pdOid 71859bed-06ac-42a3-be38-fed55fb3ba30 */ public void harvest() { // TODO: implement } }
package com.fit.model.simplefactory; /*********************************************************************** * Module: Grape.java * Author: Administrator * Purpose: Defines the Class Grape ***********************************************************************/ /** @pdOid 718691b3-49d8-4718-b1ea-c02011d384d8 */ public class Grape implements Fruit { /** @pdOid a32cc7f8-cd73-448e-8bff-73df08284d6b */ public void growth() { // TODO: implement } /** @pdOid b0e4ec6a-04d1-4631-bfca-5ccd67339dfe */ public void plant() { System.out.println("种植了葡萄"); } /** @pdOid 7090e13b-44fb-4108-b9f2-74c0f3262134 */ public void harvest() { // TODO: implement } }
package com.fit.model.simplefactory; /*********************************************************************** * Module: Strawberry.java * Author: Administrator * Purpose: Defines the Class Strawberry ***********************************************************************/ /** @pdOid 2348636e-d5df-4a4a-b523-67eaa5159150 */ public class Strawberry implements Fruit { /** @pdOid a1a041d5-5833-477b-91b5-37b2853792ba */ public void growth() { // TODO: implement } /** @pdOid c929e663-87d0-4745-9db4-0f98e0d58835 */ public void plant() { System.out.println("种植了草莓"); } /** @pdOid a36d0d37-143f-4b4d-a448-85e82cf28cac */ public void harvest() { // TODO: implement } }
工厂类:
package com.fit.model.simplefactory; /*********************************************************************** * Module: FruitGardener.java * Author: Administrator * Purpose: Defines the Class FruitGardener ***********************************************************************/ /** @pdOid 1fd473d0-7e79-421c-a0af-349352a87eec */ public class FruitGardener { /** @pdOid cedf9c41-0110-4e9e-be8f-e41d5af8a543 */ public static Fruit createFruit(int fruitType) { if (Constant.APPLE == fruitType) { return new Apple(); } else if (Constant.GRAPE == fruitType) { return new Grape(); } else if (Constant.STRAWBERRY == fruitType) { return new Strawberry(); } else { return null; } } }
常量类:
package com.fit.model.simplefactory; public final class Constant { public static final int APPLE = 1; public static final int STRAWBERRY = 2; public static final int GRAPE = 3; }
测试类:
package com.fit.model.simplefactory; public class Test { /** * @param args */ public static void main(String[] args) { Fruit apple = FruitGardener.createFruit(1); Fruit strawberry = FruitGardener.createFruit(2); Fruit grape = FruitGardener.createFruit(3); apple.plant(); strawberry.plant(); grape.plant(); } }
运行结果:
种植了苹果 种植了草莓 种植了葡萄
发表评论
-
cgroups控制cpu,memory,io使用率
2016-08-09 22:55 2645Cgroups是control groups的缩写,最初由Go ... -
为什么HashMap不是线程安全的
2016-06-15 22:27 2285序 最近因为项目的需求,经常会面试一些新人,也就会问他们 ... -
JAVA读取文件夹大小的几种方法实例
2016-04-24 15:39 771总是发现自己的C盘快满了,清理程序也不会帮我自己清理,然后 ... -
Java Regex - Matcher (java.util.regex.Matcher)
2015-03-01 13:59 880The Java Matcher class (java. ... -
Java Regex - Pattern (java.util.regex.Pattern)
2015-03-01 11:22 1571Java中的Pattern类是Java正则表达式API ... -
eclipse中查看jdk的源码
2014-11-23 11:43 1061最近一段时间跟jdk源码打交道的比较多,但是有的时候却是看 ... -
Oracle常见死锁发生的原因以及解决办法
2014-08-31 13:25 7562一,删除和更新之间引起的死锁 造成死锁的原因就是多个线程 ... -
Struts2学习初设系列(一)之环境搭建
2014-07-20 22:47 1103已经毕业很长时间了,回过头来想想都不知道自己做了什么,由于 ... -
算法的时间复杂度分析
2014-07-20 11:14 16792.9.1 算法时间复杂度定义 在进 ... -
解析 Java 类和对象的初始化过程
2014-07-06 18:14 680问题引入 近日我在调试一个枚举类型的解析器程序,该 ... -
Java 中正确使用 hashCode 和 equals 方法
2014-07-05 18:17 684在这篇文章中,我将告诉大家我对hashCode和equals ... -
通过分析 JDK 源代码研究 Hash 存储机制
2014-07-05 17:22 646集合和引用 就像引 ... -
NIO 入门
2014-07-05 17:15 673在开始之前 关于本教程 新的输入/输出 (NIO) 库 ... -
利用AJax方式提交和Webservice完成页面输入汉字简体字回显繁体字
2014-06-29 18:05 1179最近一直在学习新的 ... -
How To Parse XML File Using XPath In Java
2014-06-29 11:59 1337最近一直在学习XML的Xpath解析方式,据说是一个很简单 ... -
Java排序算法之快速排序
2014-06-22 11:27 846快速排序使用分治法(Divide and conquer)策略 ... -
Java排序算法之简单选择排序
2014-06-21 22:31 796在网上搜索了很多的算法,貌似大家说的简单选择排序算法和直接选择 ... -
Java排序算法之冒泡排序
2014-06-21 20:22 1031冒泡排序算法的基本思想是:首先将第n-1个记录的关键字和第n个 ... -
Java排序算法之直接插入排序
2014-06-21 19:33 1231直接插入排序算法的基本思想是:把n个待排序的元素看成为 ... -
JAVA之桥接模式
2014-05-26 20:11 0桥模式:将某个问题抽象的不同形式分别与该问题的具体实现 ...
相关推荐
在这个"java设计模式之简单工厂.zip"压缩包中,包含了两个视频文件,分别以“5.理解简单工厂.avi”和“4.初识和体会简单工厂.avi”命名,它们旨在帮助我们深入理解和掌握Java中的简单工厂设计模式。 简单工厂模式是...
### Java设计模式之简单工厂模式详解 #### 一、创建型模式概览 在软件工程领域,设计模式是一种被广泛采用的解决方案模板,用于解决在软件设计过程中遇到的常见问题。其中,创建型模式(Creational Pattern)专注...
**Java设计模式——简单工厂** 简单工厂模式是软件设计模式中的一种基础模式,它属于创建型设计模式。在Java编程中,我们常常会遇到需要创建一系列相关或相互依赖的对象,而这些对象的创建过程可能会非常复杂。这时...
"设计模式之java工厂模式"是关于如何优雅地创建对象的一种经典设计模式,它属于创建者模式类别。创建者模式主要关注对象的创建,而工厂模式则在其中扮演着重要角色,因为它提供了一种抽象的方式来创建对象,从而使...
简单工厂模式是面向对象设计中的一种经典设计模式,它属于创建型模式,主要用来解决对象的创建问题。在Java编程中,简单工厂模式通过一个中心工厂类来负责创建相关的对象,而无需让客户端代码直接new具体的产品类。...
在软件开发中,设计模式是解决常见问题的模板或最佳实践,它们被广泛应用于Java和其他面向对象编程语言中。以下是对标题和描述中提到的一些关键设计模式的详细解释: 1. **MVC模式(Model-View-Controller)**:这...
**Java工厂设计模式之简单工厂** 简单工厂设计模式是一种创建型设计模式,它提供一个创建对象的静态方法,客户端可以通过这个静态方法获取所需的具体产品,而无需了解这些产品的具体实现。这种模式的主要目的是将...
例题简单的阐述了Java工厂模式的概念,有利于读者更好地了解Java工厂模式
### JAVA设计模式之简单工厂模式详解 #### 一、简单工厂模式概述 简单工厂模式是一种常用的类的创建型设计模式,它的主要目的是提供一个统一的接口来创建一系列相关的或者相互依赖的对象,而无需指定它们具体的类...
Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种在特定情境下为了解决常见问题而制定的通用解决方案的描述。它们描述了...
### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...
Java设计模式 - 简单工厂 & 工厂方法(构建工厂)源码:FactoryModel - 详情:https://blog.csdn.net/Dream_Weave/article/details/83989879
简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题。在Java编程中,简单工厂模式通过一个公共的工厂类来创建对象,避免了客户端代码直接new对象,增强了代码的可维护性和扩展...
在Java编程领域,设计模式是一种解决常见问题的模板或...在阅读给定的博客文章《java设计模式之三大工厂模式》时,可以期待作者详细解析每种模式的结构、优缺点以及使用示例,帮助读者更好地理解和应用这些设计模式。
在软件设计模式中,工厂模式是一种非常常用的行为型模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个工厂类来负责对象的创建。这样可以使得系统更具可扩展性和可维护性。...
### Java设计模式(刘伟) #### 一、引言 在《Java设计模式》这本书中,作者刘伟全面地介绍了24种经典的设计模式,并通过丰富的案例和代码示例进行了详细的解析。本书不仅适合初学者作为入门教材,也适合有一定...
**简单工厂模式**是软件设计模式中的一种基础模式,它属于创建型模式,主要用于简化对象的创建过程。在简单工厂模式中,一个专门的工厂类负责创建对象,客户端通过调用工厂类的方法来获取所需的对象,而无需关心具体...
JAVA设计模式之工厂模式 JAVA设计模式之工厂模式是软件开发中一种常用的设计模式,它专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。 一、工厂...
工厂模式是设计模式中的一种,属于创建型模式,它的主要目标是提供一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂模式使代码能够独立于实际的产品类型进行工作。 工厂模式的核心思想是通过一个共同的...
在Java编程中,运用合适的设计模式可以提高代码的可维护性、可扩展性和可复用性。以下是关于Java版本设计模式实现demo的一些补充说明: 1. 设计模式分类 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式...