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

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

UML示意图:

组成部分

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

2.  抽象产品:是具体产品的抽象,可以是interfaceabstract

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)

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

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

 作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值