首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

第一个设计方式:简单工厂

2012-11-17 
第一个设计模式:简单工厂第一个设计模式:简单工厂UML示意图:v:shapetype id_x0000_t75 pathm@4@5l@4

第一个设计模式:简单工厂

第一个设计模式:简单工厂

UML示意图:<v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"> </v:shapetype>

<v:shapetype path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 197.25pt; HEIGHT: 134.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png">第一个设计方式:简单工厂</v:imagedata></v:shape>

组成部分

1.? 工厂类:产生产品的加工厂

2.? 抽象产品:是具体产品的抽象,可以是interface和abstract

3.? 具体产品:一个个实实在在的产品

说明:用户多工厂类产生并返回一个产品供用户使用

<o:p>?</o:p>

代码例子:

1. 工厂类<o:p></o:p>

/*

?* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>

?*/

package simplefactory;

/**

?* @author Administrator

?*/

public class Factory {

??? public static IProduct getInstance(int i) throws Exception{

??????? IProduct product = null;

??????? switch(i){

??????? case 1:product = new Product1();break;

??????? case 2:product = new Product2();break;

??????? default:throw new Exception("无此对象!");

??????? }

??????? return product;

??? }

}

2. 抽象产品接口<o:p></o:p>

/*

?* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>

?*/

package simplefactory;

<o:p>?</o:p>

/**

?* @author Administrator

?*/

public interface IProduct {

??? //抽象产品

??? boolean login();

}

3. 具体产品1<o:p></o:p>

/*

?* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>

?*/

package simplefactory;

<o:p>?</o:p>

/**

?* @author Administrator

?*/

public class Product1 implements IProduct {

<o:p>?</o:p>

??? /* (non-Javadoc)

???? * @see simplefactory.IProduct#login()

???? */

??? public boolean login() {

??????? //code is here

??????? System.out.println("产品1的商业方法,login...");

??????? return true;

??? }

}

具体产品2<o:p></o:p>

/*

?* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>

?*/

package simplefactory;

<o:p>?</o:p>

/**

?* @author Administrator

?*/

public class Product2 implements IProduct{

<o:p>?</o:p>

??? /* (non-Javadoc)

???? * @see simplefactory.IProduct#login()

???? */

??? public boolean login() {

??? ????// TODO Auto-generated method stub

??????? System.out.println("产品2的商业方法,login...");

??????? return false;

??? }

}

4. 使用<o:p></o:p>

/*

?* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>

?*/

package simplefactory;

<o:p>?</o:p>

<o:p>?</o:p>

/**

?* @author Administrator

?*/

public class <st1:place w:st="on">Main</st1:place> {

<o:p>?</o:p>

??? public static void main(String[] args) {

??????? try {

??????????? IProduct product = Factory.getInstance(1);

??????????? product.login();//产品1

??????????? product = Factory.getInstance(2);

??????????? product.login();//产品2

???????????

??????????? product = Factory.getInstance(3);//没有这个产品,所以得到异常

??????? } catch (Exception e) {

??????????? // TODO Auto-generated catch block

??????????? e.printStackTrace();

??????? }

???????

??? }

}

5. 输出结果<o:p></o:p>

产品1的商业方法,login...<o:p></o:p>

产品2的商业方法,login...<o:p></o:p>

java.lang.Exception: 无此对象!<o:p></o:p>

??? at simplefactory.Factory.getInstance(Factory.java:17)<o:p></o:p>

??? at simplefactory.Main.main(Main.java:19)<o:p></o:p>

优点:客户端可以动态的创建并得到一个对象,使责任得到了分工。

缺点:工厂类是简单工厂模式的核心,创建并返回静态已知的对象。这样对于扩展性来说是一个阻碍。比如有新的产品加入,则只有在工厂类中加入代码。这违背了开-闭原则。

?作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552

?

热点排行