浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍
工厂模式的定义:简单地说,用来实例化对象,取代new操作。
工厂模式专门负责将大量有共同接口的类实例化。工作模式能够动态决定将哪一个类实例化。不用先知道每次要实例化哪一个类。
工厂模式能够分一下三种形态:
简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory)。
工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic
Factory)。
抽象工厂 (Abstract Factroy)模式:又称工具箱模式(kit)。
1.1简单工厂模式(静态工厂模式):
简单工厂模式有三个角色: 1. 抽象产品接口 2. 详细产品类 3. 工厂类。
1.2简单工厂模式的实现(建一个simpleFactory包。全部程序放在该包下):
(1)首先建一个抽象产品接口(Computer.java)。
package simpleFactory;
public interface Computer {
public void run();
}
(2)建三个详细产品类(Dell.java、Lenovo.java、Asus.java),须要实现Computer接口。
package simpleFactory;
public class Dell implements Computer {
public void run() {
System.out.println("戴尔电脑执行了");
}
} package simpleFactory;
public class Lenovo implements Computer {
public void run() {
System.out.println("联想电脑执行了");
}
}
package simpleFactory;
public class Asus implements Computer {
public void run() {
System.out.println("华硕电脑执行了");
}
}
(3)建一个工厂类(ComputerFactory.java)。
package simpleFactory;
public class ComputerFactory {
public static Computer makeComputer(String ComputerName)throws Exception {
if(ComputerName.equals("dell")){
return new Dell();
}else if(ComputerName.equals("lenovo")){
return new Lenovo();
}else if(ComputerName.equals("asus")){
return new Lenovo();
}else{
throw new Exception();
}
}
}
(4)建一个client程序(TestSimpleFactory.java)測试。
package simpleFactory;
public class TestSimpleFactory {
public static void main(String []args)throws Exception{
Computer computer=ComputerFactory.makeComputer("dell");
computer.run();
}
}
执行输出:
戴尔电脑执行了
从输出能够看出,工厂类依据不同的參数生成出不同的对象。不用亲自 new 对象。
这就是简单工厂模式。简单工厂模式使得client不用负担起创建对象的责任,仅仅负责拿对象使用。在这样的模式中,对于产品是符合开闭原则的(对扩展开放,对改动封闭)。可是对于工厂部分就不符合这个原则了,每添加一种品牌电脑都要改动一下工厂类的代码。而且这个工厂类做了全部的东西。是一个上帝类,当它出了问题,全部东西都不能运作了,由于它提供的是静态方法,无法继承,所以无法提供具有继承等级结构的工厂角色,无法与有等级结构的产品相应起来,所以我们要改进这个工厂部分,就是接下来要分析的工厂方法模式。
(7)最后。我们再看一下简单工厂模式的UML图。
图1.1 简单工厂模式
推荐文章:
浅析JAVA设计模式之工厂模式(二)
http://blog.csdn.net/minidrupal/article/details/38323457
Author: Vicky
Introduction: 教育工作者
Sign: 前事之不忘,后事之师
浅析JAVA设计模式之工厂模式(一)的更多相关文章
- 浅析JAVA设计模式之工厂模式(二)
1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- java设计模式2————工厂模式
1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...
- java 设计模式之工厂模式与反射的结合
工厂模式: /** * @author Rollen-Holt 设计模式之 工厂模式 */ interface fruit{ public abstract void eat(); } ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Java设计模式之工厂模式(简单工厂模式+工厂方法模式)
摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...
- java设计模式之一工厂模式
简单工厂模式是java设计模式中最简单的设计模式之一: 工厂模式是最常用的设计模式之一. 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模 ...
随机推荐
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...
- .NET - 代码重构技巧
通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然了,这也是从一个普通程序员到一个高级程序员的必由 ...
- 用c#实现单链表(程序代码已经验证,完全正确)
1.程序的大致结构如下图: 2.下面依次列出各个类的代码 ①ILISTDs.cs 这是一个接口类,列出单链表的方法 using System; using System.Collections.Ge ...
- Oracle 排序规则
<pre name="code" class="html">SQL> select * from t1 where id>=1 and ...
- HDU1584:蜘蛛牌(DFS)
Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...
- 用 managedQuery() 时须要注意的一个陷阱
Activity 里面提供了一个 managedQuery() 方法,依照 Android SDK 里面的说明,"the activity will manage its lifecycle ...
- 2014Esri全球用户大会——亮点系列之精彩应用案例
在2014 Esri UC上,Esri邀请不少用户到场分享了自己企业的案例,在这里与大家进行分享. 一.City of Mineapolis 1.案例背景 Mineapolis市使用GIS已经数十年, ...
- _00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0
笔者博文:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- find . / -newer oldest_file.txt ! -newer newest_file.txt
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项. 它的一般形式为: $ find . / -newer oldest_file.txt ! -newer newe ...
- STM8S 串口应用 UART2 STM8S105
//少说话.多做事,下面是我验证过没有问题的串口发送接受数据 //使用MCU stm8s105c6 UART2 //初始化时调用: GPIO_DeInit(GPIOD); /* Configure P ...