(1)创建模式之工厂模式
关键字: 模式, patternY 先生 和 Q女生结婚了,两个人组成了幸福的家庭... ...
现在,我们就来看看他们的家里都有哪些有趣的故事。
结婚后,家里的钱哪,贵重物品哪,都是由 Q 女生保管的。
这天,Y先生需要买一本书,但是Q女生不在家,所以他就私自拿了 100 元钱。当然,晚上他告诉Q女士了。
某一天,Y先生需要买一个钱包,恰巧Q女士还是不在家,所以他也是私自拿了100元钱。晚上也告诉Q女士了。
某天晚上,Q女士决定找Y先生谈一谈。
Q女士:你为什么总在我这拿钱而不告诉我?
Y先生:我也没办法呀,我也知道零零碎碎的拿那么多钱确实不太好记账。
Q女士:我决定改变这个方式,看看我下面的想法吧:
- public class MoneyFactory {
- public static Money getMoney() {
- return new Money();
- }
- }
Y先生:这个主意不错!可是,我每次拿的钱都不一样啊!
Q女士:这个容易,我修改一下:
- public static Money getMoney(String reason) {
- Money money = new Money();
- if(reason.equals("买书")) {
- money.setValue(80);
- } else if(reason.equals("钱包")) {
- money.setValue(100);
- } else {
- money.setValue(0);
- }
- return money;
- }
Y先生:买书的钱似乎少了点。。。(不过Y先生突然发现,他只要多 getMoney 几次,就可以得到足够的钱了,嘿嘿,他是不会告诉Q女士这个诀窍的!)
Y先生:可是老婆,有的时候我需要户口本,房产证什么的,因为有的时候一些地方需要这些证件。
Q女士:这很容易,你还是用这个,不过我得改一下名字:
- public class ThingsFactory {
- public static Money getMoney(String reason) {
- Money money = new Money();
- if(reason.equals("买书")) {
- money.setValue(80);
- } else if(reason.equals("钱包")) {
- money.setValue(100);
- } else {
- money.setValue(0);
- }
- return money;
- }
- public static Card getCard() {
- return new Card();
- }
- }
Y先生:看起来不错,可是老婆,你知道,我买中文的书的时候,需要中国的银行卡和人民币,可是我买国外的书的时候,
需要国外的银行卡和美元呢!
Q女士:你怎么这么烦呢!让我想想,如果都放到 ThingsFactory 里确实太乱了,好吧,我来改造一下:
我们创建一个 Money 类,然后创建两个子类 RmbMoney 和 DollarMoney。
我们再创建一个 Card 类,然后创建两个字类 ChinaCard 和 OtherCard 。
当然我们还得创建一个抽象的工厂类,就叫 AbstractThingsFactory 吧!
- public abstract class AbstractThingsFactory {
- public abstract Money getMoney(String reason);
- public abstract Card getCard();
- }
- public class ChinaThingsFactory extends AbstractThingsFactory {
- public Money getMoney(String reason) {
- Money money = new RmbMoney();
- if(reason.equals("买书")) {
- money.setValue(80);
- } else if(reason.equals("钱包")) {
- money.setValue(100);
- } else {
- money.setValue(0);
- }
- return money;
- }
- public Card getCard() {
- return new ChinaCard();
- }
- }
- public class OtherThingsFactory extends AbstractThingsFactory {
- public Money getMoney(String reason) {
- Money money = new DollarMoney();
- if(reason.equals("买书")) {
- money.setValue(40);
- } else if(reason.equals("钱包")) {
- money.setValue(50);
- } else {
- money.setValue(0);
- }
- return money;
- }
- public Card getCard() {
- return new OtherCard();
- }
- }
Q女士:这下可以了吧!每一个工厂针对你每一种情况,以后别再烦我了。
Y先生:好,好。。。。。。买外国的书给钱就这么少啊。。。。
可是Y先生始终没告诉Q女士那个诀窍,所以,他总是有足够的钱去买东西 :)
而且,实际上,Y先生说买外国的书,他也只是说说而已,其实他从来没买过外国的书 :-)
发表评论
- 浏览: 144951 次

- 详细资料
搜索本博客
我的相册
共 3 张
最新评论
-
网站的静态页面生成方案
笑 喘 写道yananay 写道 把对 index.do 请求后的结果保存成一个 ...
-- by tianmo2008 -
网站的静态页面生成方案
我曾经尝试过在ASP.NET中做这样的事情,用某户访问某个页面时,先从配置里读取 ...
-- by 活靶子 -
网站的静态页面生成方案
对于CMS静态发布,我用的是用Veocity模板去 生产的,根据一定的业务逻辑去 ...
-- by pablo3518 -
聊聊大连新的残疾人制度
政府张口要钱,什么理由已经不重要了。。。
-- by issppt -
请先不要讨论细节好吗
[quote="ayis"][quote="kimmking"][quote=" ...
-- by gzstyxb






评论排行榜