- 浏览: 263177 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
cuiqi4016:
正在做json转换的功能,帮大忙了,感谢博主分享
java 通过反射获取泛型的类型 -
cxshun:
写得很好,感谢博主的分享
java 通过反射获取泛型的类型 -
joy3229233:
[url][/url][flash=200,200][/fla ...
(转)flex checkbox 选中 -
linkagebest:
盗版可耻。。。。。
(转)flex checkbox 选中 -
shuai0420:
...
flex数据绑定
简单工厂,工厂方法和抽象工厂模式
对于简单工厂来说,它的工厂只能是这个样子的
对于简单工厂来说,就是需要在工厂中枚举所有的产品,所以说简单工厂还是非常笨的。
if(which.equalIgnoreCase("product1")) 只是用来区分生产什么产品的标记值,(也可以根据产品其它属性来判断,比如产品类型,产品大小,总之能够区分是什么产品的属性,或者是与产品属性相关的变量) 或者说标记值是A,生产A产品,或者工厂里定义不是这样的,我偏偏要生产B产品,或者再特殊一些,我偏偏要生产A产品+B产品,那么就要return new ProductA()+new ProductB()了。
这样,我们就可以看出一个问题来,如果要能够被简单工厂生产出来,就必须在简单工厂中有能够生产出的它的方法定义,当然还需要有这个具体产品类的定义,就是有class对应,这样确保在简单工厂中new 它的时候不会抛出 NoSuchProduct的Exception.
对于工厂方法来说
实质上它是让工厂实现了抽象的工厂接口,它把具体怎么生产一种东西,放在具体的工厂去实现了,所谓”延迟到子类中实现“
这样客户端调用是直接new 一个具体工厂的实例,然后命令它去生产,而对于具体工厂的父类(既工厂接口,接口完全可以改成子类继承父类来实现,只是这样不好,不符合OO的原则),它完全不知道什么产品被生产了,甚至它连那个具体工厂被实例化它都不知道
抽象工厂模式
抽象工厂模式主要是用来解决具体产品是有几类产品簇的问题
1,两个工厂类ConCreator1,ConCreator2都实现了Creator接口
2,ProuctA1,ProductA2都实现了ProductA接口
3,ProuctB1,ProductB2都实现了ProductB接口
4,ConCreator1负责生产ProductA类型的产品(包括ProductA1,ProductB1)
5,ConCreator2负责生产ProductB类型的产品(包括ProductA2,ProductB2)
6,工厂方法也有这样的特征,也就是说Creator不知道什么被生产出来,甚至不知道ConCreator1还是ConCreator2被实例化了,因为client高兴调那一个工厂,就调那一个工厂,就是说工厂能生产什么,对客户端是可见的。甚至还有一种情况,客户端高兴起来就生产了ProductA1,我就不生产ProductA2,因为上面的例子中它们还都是松散的,没有绑定在一起
于是提出另外一个例子,也是老提起的电脑类型的例子
1,电脑生产商是接口,
2,CUP是接口,
3,硬盘是接口,
4,IBM工厂是制造IBM品牌的电脑的工厂
5,DELL工厂是制造DEll品牌的电脑的工厂
为讨论方便,就认为电脑=CUP+硬盘;
6,所以呀CUP有IBM的CPU和DELL的CPU
7,同样硬盘也是有IBM的硬盘和DELL的硬盘
8,IBM工厂生产IBM的CPU和IBM的硬盘,绝对不生产DELL的CPU,也不生产DELL的硬盘
9,同样DELL工厂也是一样
DELL电脑工厂一样
对于简单工厂来说,它的工厂只能是这个样子的
public class SimplyFactory { /** * 静态工厂方法 */ public static Prouct factory(String which) throw NoSuchProductExcption { if(which.equalIgnoreCase("product1")) { return new Product1(); } else if(which.equalsIgnoreCase("product2")) { return new Product2(); } else if(which.equalsIgnoreCase("product3")) { return new Product3(); } else throw NoSuchProductExcption("NoSuchProduct"); } } }而对产品Product1,Product2,Product3,可以执行接口Product,也可以不执行接口Product(当然这样不好),这个Product接口只是用来抽象具体product用的
public interface Product { void productMethod1(); //这些只是 void productMethod2(); void productMethod3(); }对工厂来说,只要有这么一种产品,一般来说就要在工厂里有它的生产的方法, 否则抛出异常,而要工厂生产的话,也必须下达生产什么产品的命令,至少要向工厂发出信号,让工厂足以区分是要生产什么产品,否则工厂是不知道生产哪一种产品,
对于简单工厂来说,就是需要在工厂中枚举所有的产品,所以说简单工厂还是非常笨的。
if(which.equalIgnoreCase("product1")) 只是用来区分生产什么产品的标记值,(也可以根据产品其它属性来判断,比如产品类型,产品大小,总之能够区分是什么产品的属性,或者是与产品属性相关的变量) 或者说标记值是A,生产A产品,或者工厂里定义不是这样的,我偏偏要生产B产品,或者再特殊一些,我偏偏要生产A产品+B产品,那么就要return new ProductA()+new ProductB()了。
这样,我们就可以看出一个问题来,如果要能够被简单工厂生产出来,就必须在简单工厂中有能够生产出的它的方法定义,当然还需要有这个具体产品类的定义,就是有class对应,这样确保在简单工厂中new 它的时候不会抛出 NoSuchProduct的Exception.
对于工厂方法来说
实质上它是让工厂实现了抽象的工厂接口,它把具体怎么生产一种东西,放在具体的工厂去实现了,所谓”延迟到子类中实现“
public interface Creator { public Prouct factory(); } public SubCreator1 implent Creator { public Prouct factory() { return new ConcreteProduct1(); } } public SubCreator2 implent Creator { public Prouct factory() { return new ConcreteProduct2(); } }请注意:返回类型是Product型的!!
这样客户端调用是直接new 一个具体工厂的实例,然后命令它去生产,而对于具体工厂的父类(既工厂接口,接口完全可以改成子类继承父类来实现,只是这样不好,不符合OO的原则),它完全不知道什么产品被生产了,甚至它连那个具体工厂被实例化它都不知道
抽象工厂模式
抽象工厂模式主要是用来解决具体产品是有几类产品簇的问题
public interface Creator { public ProuctA factoryA(); public ProuctB factoryB(); } public interface ProductA //ProductA 接口 { } public interface ProductB //ProductB 接口 { } public class ConCreator1 implent Creator { public ProuctA factoryA() { return new ConcreteProductA1(); } public ProuctB factoryB() { return new ConcreteProductB1(); } } public class ConCreator2 implent Creator { public ProuctA factoryA() { return new ProductA2(); } public ProuctB factoryB() { return new ProductB2(); } } public class ProductA1 implements ProductA { public ProductA1() { } } public class ProductA2 implements ProductA { public ProductA2() { } } public class ProductB1 implements ProductB { public ProductB1() { } } public class ProductB2 implements ProductB { public ProductB2() { } }实际上是这样的
1,两个工厂类ConCreator1,ConCreator2都实现了Creator接口
2,ProuctA1,ProductA2都实现了ProductA接口
3,ProuctB1,ProductB2都实现了ProductB接口
4,ConCreator1负责生产ProductA类型的产品(包括ProductA1,ProductB1)
5,ConCreator2负责生产ProductB类型的产品(包括ProductA2,ProductB2)
6,工厂方法也有这样的特征,也就是说Creator不知道什么被生产出来,甚至不知道ConCreator1还是ConCreator2被实例化了,因为client高兴调那一个工厂,就调那一个工厂,就是说工厂能生产什么,对客户端是可见的。甚至还有一种情况,客户端高兴起来就生产了ProductA1,我就不生产ProductA2,因为上面的例子中它们还都是松散的,没有绑定在一起
于是提出另外一个例子,也是老提起的电脑类型的例子
1,电脑生产商是接口,
2,CUP是接口,
3,硬盘是接口,
4,IBM工厂是制造IBM品牌的电脑的工厂
5,DELL工厂是制造DEll品牌的电脑的工厂
为讨论方便,就认为电脑=CUP+硬盘;
6,所以呀CUP有IBM的CPU和DELL的CPU
7,同样硬盘也是有IBM的硬盘和DELL的硬盘
8,IBM工厂生产IBM的CPU和IBM的硬盘,绝对不生产DELL的CPU,也不生产DELL的硬盘
9,同样DELL工厂也是一样
public interface 电脑生产商 { public CPU 制造CPU(); public 硬盘 制造硬盘(); } public interface CPU { } public interface 硬盘 { } public class IBM的CPU implements CPU { public IBM的CPU(); } public class IBM的硬盘 implements 硬盘 { public IBM的硬盘(); } public class DELL的CPU implements CPU { public DELL的CPU(); } public class DELL的硬盘 implements 硬盘 { public DELL的硬盘(); } //下面是IBM工厂 public class IBM工厂 { private CPU IBM的CPU私有变量=null; private 硬盘 IBM的硬盘私有变量=null; private CPU 制造IBMCPU() { return new IBM的CPU(); } private 硬盘 制造IBM硬盘() { return new IBM的CPU(); } public 电脑 制造IBM电脑() { try{ IBM的CPU私有变量=制造IBMCPU(); IBM的硬盘私有变量=制造IBM硬盘(); if(IBM的CPU私有变量!=null&&IBM的硬盘私有变量!=null) retrun (IBM的CPU私有变量+IBM的硬盘私有变量); //组装成IBM电脑 } catch(Exception e) { System.out.println("制造IBM电脑失败!"); } } } }这样,客户端无法通过命令单生产出一个CPU来,这样抽象才真正成为一个完整产品的工厂,只要向工厂发出生产的命令,一台完整的电脑就生产出来了,而工厂怎么生产的,生产了哪些部件,外界就看不见了,外界就知道这个工厂是生产IBM电脑整机的工厂!
DELL电脑工厂一样
发表评论
-
JVM内存管理:深入垃圾收集器与内存分配策略
2012-09-29 09:40 920转自http://icyfenix.iteye.com ... -
javaVM 内存管理
2012-09-29 09:18 1042转自http://icyfenix.iteye.com/blo ... -
使用J2SE API读取Properties文件的六种方法
2012-03-15 11:46 9431。使用java.util.Properties ... -
java设计模式 -Decorator
2012-03-01 16:05 970//抽象构件角色 abstract public c ... -
设计模式------Decorator
2012-03-01 14:29 807一、学习装饰着模式 1、定义及作用 该模式以对 ... -
正则表达式学习
2011-12-31 09:56 1068//正则表达式去掉中文 public static vo ... -
System.gc()
2011-06-24 17:40 1035最近在在翻看java的Garbage Collection,即 ... -
java gc(转)
2011-06-24 16:07 973<%@ page contentType="t ... -
hibernate
2011-06-24 11:29 01.hibernate lazy, inverse, casc ... -
详解spring事务属性(转)
2011-06-10 10:46 830Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我 ... -
spring心得(转)
2011-06-03 11:00 8421、spring原理 s ... -
实战Concurrent
2011-05-30 17:45 918编写多线程的程序一直都是一件比较麻烦的事情,要考虑很多事情,处 ... -
Memcached(转)
2011-05-30 17:32 957我对于Memcached的接触,还是在去年看了CSDN的一系列 ... -
动态创建代理(转)
2011-04-21 11:22 1056随着Proxy的流行,Sun把它纳入到JDK1.3实现了Jav ... -
代理模式(转)
2011-04-21 11:17 902代理模式是常用的Java 设计模式,它的特征是代理类与委托类有 ... -
java 通过反射获取泛型的类型
2011-03-24 13:34 32180jdk1.5开始支持泛型,所以我们有时需要把泛型里定义的对象的 ... -
java反射学习(转)
2011-03-22 15:51 1020Java提供了一套机制来动态执行方法和构造方法,以及数组操作等 ... -
java反射(转)
2011-03-22 15:29 973Java的反射机制是Java特 ... -
Quartz学习
2010-11-09 13:20 9331.与Spring集成 Spring中与quartz 的结合方 ... -
Spring事务配置的五种方式
2010-09-30 13:00 932前段时间对Spring的事务配置做了比较深入的研究,在 ...
相关推荐
3. Qt工厂模式工程 4. Qt工厂模式例程 5. Qt工厂模式例子 6. 简单工厂模式 部分源码实例: // 奔驰工厂 class BenzFactory : public AFactory { public: ICar* CreateCar() { return new BenzCar(); } }; // ...
工厂模式,也称为工程模式或调试模式,是制造商为了测试和调整设备功能而设置的一种特殊模式。在这个模式下,用户可以访问和修改通常隐藏的高级设置,包括地图数据、系统参数以及硬件诊断。下面我们将详细介绍如何...
工厂模式是一种常用的软件设计模式,它是创建型设计模式的一种,主要解决对象的创建问题,将对象的创建过程封装起来,使得创建过程独立于使用过程。这样可以提高代码的可复用性和灵活性,同时降低了系统的耦合度。...
**简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...
- 关机状态下,同时按住“音量-”和“电源”键,屏幕亮起后松开,一般会进入工程模式,从中可以选择工厂模式。 4. MediaTek(联发科)机芯: - 长按遥控器的“设置”和“返回”键,开机后会进入工程模式,选择相应...
其中,"工程模式"是一个特殊的功能,通常隐藏在系统深处,主要用于制造商进行硬件测试和调试。对于用户而言,进入工程模式可以获取更多关于手机硬件的信息,进行高级设置,甚至解决一些特定问题。本篇文章将详细介绍...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
测试机型:32m3095(其它机型未试,大同小异,自行测试) 测试时间:2022.06.15 进入酒店模式好处:可以设置...进入工厂模式好处:可以设置不正常的颜色,声音。恢复系统默认设置。好多功能,是英文的,我看不懂。
根据提供的文档内容,本文将详细解释乐华板卡如何进入工程模式的方法,主要涉及Novatek和Realtek两种方案下的具体操作步骤。 ### 一、Novatek方案进特殊模式方法 #### 1. 板卡型号:PT系列 **1.1 工厂菜单** - *...
进入凯立德 工程模式 的方法 在“查找”菜单中切换到“123”输入法,输入*147#即可进入工程模式
"设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...
在软件工程中,设计模式是解决常见问题的模板或最佳实践。工厂模式是其中最常用的一种,它提供了创建对象的最佳方式。在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。...
以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...
"C++设计模式-工程模式"这个标题暗示我们将深入探讨C++中的一种核心设计模式——工厂模式。工厂模式是创建型设计模式,它提供了一种创建对象的最佳方式,允许我们在不指定具体类的情况下创建对象。在描述中提到的...
本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...
《工厂模式源代码》 工厂模式是软件设计模式中的一种,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当我们创建对象时,不会直接实例化具体的产品类,而是通过一个共同的接口或者抽象类,即工厂...
工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...
在软件设计模式中,工厂模式是一种非常常用的行为型模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个工厂类来负责对象的创建。这样可以使得系统更具可扩展性和可维护性。...
工厂模式是一种设计模式,它是创建型模式的一种,主要用于在代码中抽象出对象的创建过程,使得创建对象的过程与具体的实现分离,从而提高了代码的可扩展性和可维护性。在这个"工厂模式(2016手机案例)"中,我们将...