avatar
工厂模式 (转载)# Programming - 葵花宝典
H*7
1
我提前两周设了autopay,到期日过期两天去看,还没给我pay.我连忙手动pay了。结果
收我39元late fee, 24元利息 (900元balance)
avatar
d*e
2
在填ds 160时,有个问题是Passport/Travel Document Type
选项有regular,official,diplomatic,other
在前两个选项之间搞不明白
就普通人,选regular吗?
avatar
S*W
3
18岁:坚持要找心中的白马王子。
19岁:坚决地拒绝自己不喜欢的。
20岁:即使遇见“有感觉的”,也会保持绝对的矜持。
21岁:和很有好感的,玩适度的矜持。
22岁:只要有点好感的,就愿意平等交往。
23岁:愿意给不反感的男人第二次考察的机会。
24岁:和没太多感觉的,多聊聊天,抱着发展试试看的心态。
25岁:和不讨厌的男人短信,尽量不要留下不积极的印象。
26岁:尽力表现出适当的热情和主动。
27岁:找个人倾斜自己的心情故事,对“爱情”的理解开始迷茫。
28岁:开始征婚,收到很多不靠谱的回信。
29岁:征婚失败。
30岁:开始相亲。
31岁:相亲男不积极,试着主动给相亲对象发短信。
32岁:开始考虑要不要倒追男人,可惜周围available的男人已经很少。
33岁:下定决心倒追一个男人,结果被拒绝。
34岁:觉得自己不会追男人。
35岁:“男人”成了最喜欢最敏感又最悲哀又最无奈的两个字眼。
avatar
g*7
4
【 以下文字转载自 Java 讨论区 】
发信人: ginger007 (ginger), 信区: Java
标 题: 工厂模式
发信站: BBS 未名空间站 (Mon Jun 30 16:20:35 2014, 美东)
看了一些关于工厂模式系列的文章,怎么实现都很清楚,但很少提到为什么需要工厂模式
,它解决了什么问题.或者反过来说,如果不用工厂模式,我们可能会遇到哪些问题?
avatar
k*n
5
i think u didn't read carefully
usually autopay will be turned on for the next pay period.

【在 H******7 的大作中提到】
: 我提前两周设了autopay,到期日过期两天去看,还没给我pay.我连忙手动pay了。结果
: 收我39元late fee, 24元利息 (900元balance)

avatar
r*e
6
Official passport (Service passport, also Special passport)
- Issued to government employees for work-related travel, and to
accompanying dependents.
明白了?

【在 d********e 的大作中提到】
: 在填ds 160时,有个问题是Passport/Travel Document Type
: 选项有regular,official,diplomatic,other
: 在前两个选项之间搞不明白
: 就普通人,选regular吗?

avatar
g*g
7
Singleton is the most common reason you want to use factory pattern.

【在 g*******7 的大作中提到】
: 【 以下文字转载自 Java 讨论区 】
: 发信人: ginger007 (ginger), 信区: Java
: 标 题: 工厂模式
: 发信站: BBS 未名空间站 (Mon Jun 30 16:20:35 2014, 美东)
: 看了一些关于工厂模式系列的文章,怎么实现都很清楚,但很少提到为什么需要工厂模式
: ,它解决了什么问题.或者反过来说,如果不用工厂模式,我们可能会遇到哪些问题?

avatar
a*n
8
cit, amex的是比较silly,
不象chase,
如果你在之pay了的话,auto pay会再pay一次

【在 k****n 的大作中提到】
: i think u didn't read carefully
: usually autopay will be turned on for the next pay period.

avatar
d*e
9
thanks a lot!

【在 r*******e 的大作中提到】
: Official passport (Service passport, also Special passport)
: - Issued to government employees for work-related travel, and to
: accompanying dependents.
: 明白了?

avatar
x*u
10
且不说单元测试之类的,没有工厂类生存空间管理,引用计数什么的都不好做。

【在 g*******7 的大作中提到】
: 【 以下文字转载自 Java 讨论区 】
: 发信人: ginger007 (ginger), 信区: Java
: 标 题: 工厂模式
: 发信站: BBS 未名空间站 (Mon Jun 30 16:20:35 2014, 美东)
: 看了一些关于工厂模式系列的文章,怎么实现都很清楚,但很少提到为什么需要工厂模式
: ,它解决了什么问题.或者反过来说,如果不用工厂模式,我们可能会遇到哪些问题?

avatar
f*e
11
你自己没读,设置autopay后它说要4-6weeks,它还提醒你在此之前手动付款

我提前两周设了autopay,到期日过期两天去看,还没给我pay.我连忙手动pay了。结果
收我39元late fee, 24元利息 (900元balance)

【在 H******7 的大作中提到】
: 我提前两周设了autopay,到期日过期两天去看,还没给我pay.我连忙手动pay了。结果
: 收我39元late fee, 24元利息 (900元balance)

avatar
Y*G
12
不用工厂模式怎么注入?
avatar
H*7
13
他没这么说,不过我是看到说take 4-6 weeks.我心想也用不了这么长时间吧,chase之
类都是当场就active的。
而且这个利息也收的太高了。两天,$24/$900,年息折算500%

【在 k****n 的大作中提到】
: i think u didn't read carefully
: usually autopay will be turned on for the next pay period.

avatar
k*g
14

Because calling the constructor of a class is a form of hard-coding - the
type (class name) of the class you are creating.
In many situations, the rules for deciding which concrete class to create is
too complicated. Also it is not extensible - you cannot make existing code
create a different class (say, your own derived class instead of the base
class). Also, derived classes may require additional constructor arguments,
for which existing code hardwired to call the base class constructor will
not be able to provide.
As one tries to workaround the issue of making constructor-calling code
extensible, one would inevitably follow the footstep of factory patterns,
and onward for dependency injection patterns. You as a programmer will also
inevitably embark this journey, unless you quit programming.

【在 g*******7 的大作中提到】
: 【 以下文字转载自 Java 讨论区 】
: 发信人: ginger007 (ginger), 信区: Java
: 标 题: 工厂模式
: 发信站: BBS 未名空间站 (Mon Jun 30 16:20:35 2014, 美东)
: 看了一些关于工厂模式系列的文章,怎么实现都很清楚,但很少提到为什么需要工厂模式
: ,它解决了什么问题.或者反过来说,如果不用工厂模式,我们可能会遇到哪些问题?

avatar
y*i
15
不是按两天算的利息

【在 H******7 的大作中提到】
: 他没这么说,不过我是看到说take 4-6 weeks.我心想也用不了这么长时间吧,chase之
: 类都是当场就active的。
: 而且这个利息也收的太高了。两天,$24/$900,年息折算500%

avatar
N*K
16
从来没用过这玩意
我都是用模板

is
code
,

【在 k**********g 的大作中提到】
:
: Because calling the constructor of a class is a form of hard-coding - the
: type (class name) of the class you are creating.
: In many situations, the rules for deciding which concrete class to create is
: too complicated. Also it is not extensible - you cannot make existing code
: create a different class (say, your own derived class instead of the base
: class). Also, derived classes may require additional constructor arguments,
: for which existing code hardwired to call the base class constructor will
: not be able to provide.
: As one tries to workaround the issue of making constructor-calling code

avatar
H*7
17
好了,39+24元都要回来了。
avatar
d*r
18
大牛的意思是因为 TheSingletonClass 只能有一个构造函数,所以才需要 factory
pattern?
说来惭愧,自己工作中维护或者修改过的C++代码,经常有 factory pattern,
但是我从来没搞懂为啥要用这个。。。哈哈。。。

【在 g*****g 的大作中提到】
: Singleton is the most common reason you want to use factory pattern.
avatar
z*9
19
citi还是nice啊。要是chase就没戏。赶紧换成负balance吧。否则还要收利息。

【在 H******7 的大作中提到】
: 好了,39+24元都要回来了。
avatar
B*r
20
hibernate sessionFactory, connection pool, 最好的一个栗子.
avatar
H*7
21
啥意思?上月balance还完了还不行?这月的也要收?这月的deadline还没到啊。

【在 z****9 的大作中提到】
: citi还是nice啊。要是chase就没戏。赶紧换成负balance吧。否则还要收利息。
avatar
g*g
22
factory is not limited to singleton, but singleton has to use factory
otherwise how do you guarantee only one instance will be created?

【在 d*******r 的大作中提到】
: 大牛的意思是因为 TheSingletonClass 只能有一个构造函数,所以才需要 factory
: pattern?
: 说来惭愧,自己工作中维护或者修改过的C++代码,经常有 factory pattern,
: 但是我从来没搞懂为啥要用这个。。。哈哈。。。

avatar
z*9
23
不行。你不知道这几十块的利息怎么算出来的吧?那你还是老老实实pay成负balance
,比如-100。然后2个月不用这卡。

【在 H******7 的大作中提到】
: 啥意思?上月balance还完了还不行?这月的也要收?这月的deadline还没到啊。
avatar
g*t
24
编译器决定的,根本不需要知道什么factory, 若干年前就没什么pattern,singleton

【在 g*****g 的大作中提到】
: factory is not limited to singleton, but singleton has to use factory
: otherwise how do you guarantee only one instance will be created?

avatar
s*g
25
说的是grace period没了吧
citi不知道政策是否一样

【在 H******7 的大作中提到】
: 啥意思?上月balance还完了还不行?这月的也要收?这月的deadline还没到啊。
avatar
h*d
26

singleton
”若干年前”?你知道DP早于“若干年前”就有了吗?为什么要DP?为了解决一个共同
的问题,大家都喜欢用自己的解决方案,结果很难保证在团队环境里的代码质量。

【在 g*******t 的大作中提到】
: 编译器决定的,根本不需要知道什么factory, 若干年前就没什么pattern,singleton
avatar
H*7
27
citi不允许负balance。大不了下个月再argue一下。

balance

【在 z****9 的大作中提到】
: 不行。你不知道这几十块的利息怎么算出来的吧?那你还是老老实实pay成负balance
: ,比如-100。然后2个月不用这卡。

avatar
c*e
28
工厂模式就是用interface,abstract 之类的搞个模子,然后具体到什么了你就创建个
具体的class.比如工厂模式里有个animal的interface,然后你这次要创建个monkey的
class,下次要创建个panda的class....

【在 g*******7 的大作中提到】
: 【 以下文字转载自 Java 讨论区 】
: 发信人: ginger007 (ginger), 信区: Java
: 标 题: 工厂模式
: 发信站: BBS 未名空间站 (Mon Jun 30 16:20:35 2014, 美东)
: 看了一些关于工厂模式系列的文章,怎么实现都很清楚,但很少提到为什么需要工厂模式
: ,它解决了什么问题.或者反过来说,如果不用工厂模式,我们可能会遇到哪些问题?

avatar
z*9
29
bank billpay。

【在 H******7 的大作中提到】
: citi不允许负balance。大不了下个月再argue一下。
:
: balance

avatar
N*K
30
Panda AAA; 不就行了

【在 c*********e 的大作中提到】
: 工厂模式就是用interface,abstract 之类的搞个模子,然后具体到什么了你就创建个
: 具体的class.比如工厂模式里有个animal的interface,然后你这次要创建个monkey的
: class,下次要创建个panda的class....

avatar
c*e
31
factory模式可以节省不少代码,goodbug提到的singleton也是其一。

【在 N******K 的大作中提到】
: Panda AAA; 不就行了
avatar
N*K
32
auto Panda_ptr = static_cast(factory.create("Panda"));
这种?

【在 c*********e 的大作中提到】
: factory模式可以节省不少代码,goodbug提到的singleton也是其一。
avatar
c*e
33
兄弟,java里面没指针。你是搞c++的吧?

【在 N******K 的大作中提到】
: auto Panda_ptr = static_cast(factory.create("Panda"));
: 这种?

avatar
N*K
34
c++也有工厂模式

【在 c*********e 的大作中提到】
: 兄弟,java里面没指针。你是搞c++的吧?
avatar
c*e
35
我朋友以前搞c++,n年前换到c#了,现在吃香的喝辣的,用个framework,工作太轻松了
,做梦都笑醒了。

【在 N******K 的大作中提到】
: c++也有工厂模式
avatar
N*K
36
四大牛人

【在 c*********e 的大作中提到】
: 我朋友以前搞c++,n年前换到c#了,现在吃香的喝辣的,用个framework,工作太轻松了
: ,做梦都笑醒了。

avatar
c*e
37
哪四大?

【在 N******K 的大作中提到】
: 四大牛人
avatar
N*K
38
朋友 同学 老乡 亲戚

【在 c*********e 的大作中提到】
: 哪四大?
avatar
k*g
39
So much discussion.
Factory method is just so simple: wrap the constructor call into an ordinary
method.
(1) If the "ordinary method" is a static method, we can ask why we need
static methods (why we need to wrap a constructor call into it.) This is a
simple case of a utility method.
C bindings for C++ classes often need to wrap the constructor into a static
method. This is the only way C can call into it.
(2) If the "ordinary method" is a class method, we can ask why we need
classes (why we need a class to construct other things.) This is called the
builder pattern.
(3) If the "ordinary method" is a virtual or interface method, we can ask
why we need interfaces, inheritances or override methods (why we need OOP.)
It allows us to swap in other implementations, especially -- implementations
you don't know you don't know
Happy 4th of July.
avatar
T*x
40
学了。

ordinary
static
the

【在 k**********g 的大作中提到】
: So much discussion.
: Factory method is just so simple: wrap the constructor call into an ordinary
: method.
: (1) If the "ordinary method" is a static method, we can ask why we need
: static methods (why we need to wrap a constructor call into it.) This is a
: simple case of a utility method.
: C bindings for C++ classes often need to wrap the constructor into a static
: method. This is the only way C can call into it.
: (2) If the "ordinary method" is a class method, we can ask why we need
: classes (why we need a class to construct other things.) This is called the

avatar
i*p
41
Factory method is different from Abstract Factory. I assume LZ is asking
Abstract Factory.

ordinary
static
the

【在 k**********g 的大作中提到】
: So much discussion.
: Factory method is just so simple: wrap the constructor call into an ordinary
: method.
: (1) If the "ordinary method" is a static method, we can ask why we need
: static methods (why we need to wrap a constructor call into it.) This is a
: simple case of a utility method.
: C bindings for C++ classes often need to wrap the constructor into a static
: method. This is the only way C can call into it.
: (2) If the "ordinary method" is a class method, we can ask why we need
: classes (why we need a class to construct other things.) This is called the

avatar
g*g
42
And factory pattern is different from factory method too. So the elaboration
is irrelevant to begin with.

【在 i**p 的大作中提到】
: Factory method is different from Abstract Factory. I assume LZ is asking
: Abstract Factory.
:
: ordinary
: static
: the

avatar
e*3
43
Good post, from my understanding, I think factory method pattern is used to
consolidate the creation of similar objets. Because the object creation is
centralized, you can have more control, for example, restrict the total
number of objects created to implement the singleton pattern.

ordinary
static
the

【在 k**********g 的大作中提到】
: So much discussion.
: Factory method is just so simple: wrap the constructor call into an ordinary
: method.
: (1) If the "ordinary method" is a static method, we can ask why we need
: static methods (why we need to wrap a constructor call into it.) This is a
: simple case of a utility method.
: C bindings for C++ classes often need to wrap the constructor into a static
: method. This is the only way C can call into it.
: (2) If the "ordinary method" is a class method, we can ask why we need
: classes (why we need a class to construct other things.) This is called the

avatar
w*w
44
没有想到这里这么多大牛竟然没有把 factory pattern 的作用讲清楚?
avatar
w*w
45
好吧. 那我就献丑 献丑了!
看了那么多的回复, 个人感觉貌似都木有见到点子上.
好的 OO design 好处就是在你的需求变化下 你的client 可以适应这种变化而不需要
改动.
打个比方.
一个application 用办公室打印机的例子.
如果hard code like below:
Printer *pPrinter = new HP();
pPrinter->print();
如果有一天打印机变了准备用 canon的打印机. 那么你的client code 大约是这个样子.
Printer *pPrinter = new Canon();
pPrinter->print();
你的client 代码改动了. 因为你的需求变化了. 现在用canon打印机了.
OO design 的核心就是: 抽象不要依赖于实现, 相反实现要依赖于抽象.
好了, 再说一下 工厂模式的设计.
Idealy 应该你的代码是这样的:
Printer *pPrinter = FactorInstance("Configure_file");
pPrinter->print();
要把你的client的变化 引到外面去!
你的FactorInstance 这个对象 是读取一个config file 你们有类似于 printer =
canaon. 这样的字段. 然后FactorInstance 再根据相应的字段创建相应的object.
这样的好处就是你的client 代码不管需求如何变化, client代码是不用改动的.
打个比方 , 如果某天 , 需求又变了. 说 要用 brother 的打印机. 那么好了. 你就在
你的config file 你提供上 printer = brother 就可以 了.
当然你的 FactorInstance 你们再加上 if printer = brother then return new
Brother(); 类似于这样的语句 就可以了.
当然你需要加上 支持brother 的dll or so 啥驱动就好仂
这个也是符合软件 的 OCP 的设计原则. 即 对添加开放, 对改动关闭的原则!
所以这样的好处就是 以后需求变化, 你在config 你们改动, 然后在FactorInstance
那里添加一个判断. 再把相应的driver 拷贝进去就可以了. 那么你的client 的代码就
没有必要改动了.
个人理解, 如有不正确的地方, 请指正!
avatar
w*w
46
其实其他语言 像 C# Java 当中的framework 都大量的用到了 pattern的东西.
可能大家木有注意到而已. 像Java的 Spring framework 里面的那个啥用来创建对象
的bean 其实背后就是工厂模式的典型应用. 只不过有不少开发的人只是知道这么用,
但是这么用的好处在哪里可能没有仔细的推敲而已.
avatar
e*3
47
Java IO里面的一堆InputStreem的class就是用了decorator pattern,不过我面试过了
起码有好几十号candidate,没有几个人知道这个。

【在 w******w 的大作中提到】
: 其实其他语言 像 C# Java 当中的framework 都大量的用到了 pattern的东西.
: 可能大家木有注意到而已. 像Java的 Spring framework 里面的那个啥用来创建对象
: 的bean 其实背后就是工厂模式的典型应用. 只不过有不少开发的人只是知道这么用,
: 但是这么用的好处在哪里可能没有仔细的推敲而已.

avatar
w*w
48
decorator pattern 也是很多地方用到. 设计核心就是 is a 再加上 has a 构成了
decorator pattern的实现.
是的, 很多人就是拿起来用. 但是背后的具体实现貌似很多人不关心!
不过作为一个好的软件开发人员, 了解一下这些还是挺好的. 不过 不了解也无所谓,
拿来用用就好了. 像我这样的了解很多pattern的 还不是一样在家里待业. 反观人家不
了解的大把的赚银子不是?
哪说理去啊? ^_^
avatar
g*7
49
跟我最近在project里面coding的感觉有共同的地方。多谢指点。

子.

【在 w******w 的大作中提到】
: 好吧. 那我就献丑 献丑了!
: 看了那么多的回复, 个人感觉貌似都木有见到点子上.
: 好的 OO design 好处就是在你的需求变化下 你的client 可以适应这种变化而不需要
: 改动.
: 打个比方.
: 一个application 用办公室打印机的例子.
: 如果hard code like below:
: Printer *pPrinter = new HP();
: pPrinter->print();
: 如果有一天打印机变了准备用 canon的打印机. 那么你的client code 大约是这个样子.

avatar
T*x
50
我觉得你这个理解抽象程度不高。

子.

【在 w******w 的大作中提到】
: 好吧. 那我就献丑 献丑了!
: 看了那么多的回复, 个人感觉貌似都木有见到点子上.
: 好的 OO design 好处就是在你的需求变化下 你的client 可以适应这种变化而不需要
: 改动.
: 打个比方.
: 一个application 用办公室打印机的例子.
: 如果hard code like below:
: Printer *pPrinter = new HP();
: pPrinter->print();
: 如果有一天打印机变了准备用 canon的打印机. 那么你的client code 大约是这个样子.

avatar
k*g
51

太抽象就找抽了。又不是毕卡索。

【在 T*******x 的大作中提到】
: 我觉得你这个理解抽象程度不高。
:
: 子.

avatar
w*w
52
啥意思? 理解的抽象程度不高?
我说的是工厂模式的一个应用场合. 不是泛泛的讨论模式设计.
:-)

【在 T*******x 的大作中提到】
: 我觉得你这个理解抽象程度不高。
:
: 子.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。