工厂方法(转)

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

UML示意图:


组成部分

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

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

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

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



代码例子:

1. 工厂类

/*

* Created on 2006-11-25

*/

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. 抽象产品接口

/*

* Created on 2006-11-25

*/

package simplefactory;



/**

* @author Administrator

*/

public interface IProduct {

//抽象产品

boolean login();

}

3. 具体产品1

/*

* Created on 2006-11-25

*/

package simplefactory;



/**

* @author Administrator

*/

public class Product1 implements IProduct {



/* (non-Javadoc)

* @see simplefactory.IProduct#login()

*/

public boolean login() {

//code is here

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

return true;

}

}

具体产品2

/*

* Created on 2006-11-25

*/

package simplefactory;



/**

* @author Administrator

*/

public class Product2 implements IProduct{



/* (non-Javadoc)

* @see simplefactory.IProduct#login()

*/

public boolean login() {

// TODO Auto-generated method stub

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

return false;

}

}

4. 使用

/*

* Created on 2006-11-25

*/

package simplefactory;





/**

* @author Administrator

*/

public class Main {



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. 输出结果

产品1的商业方法,login...

产品2的商业方法,login...

java.lang.Exception: 无此对象!

at simplefactory.Factory.getInstance(Factory.java:17)

at simplefactory.Main.main(Main.java:19)

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

缺点:工厂类是简单工厂模式的核心,创建并返回静态已知的对象。这样对于扩展性来说是一个阻碍。比如有新的产品加入,则只有在工厂类中加入代码。这违背了开-闭原则。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值