设计模式之工厂模式

来源:互联网 发布:中国银行密码控件mac 编辑:程序博客网 时间:2024/06/05 09:33

说到工厂,你可能会想到批量生产……想到这里,那么我觉得对工厂模式就理解的差不多了。

还是举一个栗子吧。比如Lenovo集团不是生产各种本子嘛,首先呢,人家肯定不止生产一种本子,比如哈,这个厂子已经很高端了,想生产个啥,只要一输入名字,一按按钮,“滴”一声,本子就出来了。

输入:“ThinkPad X1” 滴一声 输出一台ThinkPad X1笔记本输入:“V480” 滴一声 输出一台V480笔记本输入:“Yoga13” 滴一声 输出一台Yoga13笔记本输入…… 滴一声 输出一台……

你现在就能想到,只要能建立一个厂子,这条产品线上的所有产品那就是滴一下的问题。所以看到这里你基本上也能猜到代码咋写了

首先你是要生产笔记本的,那么大的总纲(这里的总纲就是计算机)总得有吧。

package com.creational.factoy;public interface Computer {    public String getSymbol();}

总纲写好了,那每种型号的标准就继续写吧。

package com.creational.factoy;public class ThinkPadX1 implements Computer {    @Override    public String getSymbol() {        return "TPX1";    }}
package com.creational.factoy;public class V480 implements Computer {    @Override    public String getSymbol() {        return "V480";    }}
package com.creational.factoy;public class YOGA13 implements Computer {    @Override    public String getSymbol() {        return "YOGA13";    }}

好,个产品系列写好了,下面就是关键的一个大的厂房生产线:

package com.creational.factoy;public class ComputerFactory {    public static Computer createComputer(String serial){        if(serial.equalsIgnoreCase("TPX1")){            return new ThinkPadX1();        } else if(serial.equalsIgnoreCase("V480")){            return new V480();        } else if(serial.equalsIgnoreCase("YOGA13")){            return new YOGA13();        }         throw new IllegalArgumentException();    }}

工厂类写好了,那下面用的时候就很爽了。

package com.creational.factoy;public class FactoryClient {    public static void main(String[] args) {        Computer computer = ComputerFactory.createComputer("TPX1");        System.out.println(computer.getSymbol());        computer = ComputerFactory.createComputer("V480");        System.out.println(computer.getSymbol());        computer = ComputerFactory.createComputer("YOGA13");        System.out.println(computer.getSymbol());    }}

最后呢还是放一张UML图,等后面心情好了再看看这图那里长得好看。
这里写图片描述

参考文献:
http://www.cnblogs.com/beijiguangyong/archive/2010/11/15/2302807.html#_Toc281750449

0 0