简单工厂模式 Simple Factory【转】

来自:http://www.cnblogs.com/LIANQQ/p/3582915.html

简单工厂模式的作用就是定义一个用于创建对象的接口

在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化。

        先来看看它的组成:

         1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

         2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

         3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

首先定义一个接口

复制代码
/**
 * @author ieasy360_1
 * 定义一个接口
 */
public interface Sender{
    
    public void send();
}
复制代码

创建类实现Sender接口

复制代码
public class Qq implements Sender{

    @Override
    public void send() {
        // TODO Auto-generated method stu
        System.out.println("this is qq send!"); 
    }
}
复制代码
复制代码
public class Weixin implements Sender {

    @Override
    public void send() {
        // TODO Auto-generated method stub
        System.out.println("this is Weixin send!"); 
    }
}
复制代码

创建一个工厂类

复制代码
/**
 * @author ieasy360_1
 * 工厂类
 */
public class SenderFactory {

    public Sender sendproduce(String type)
    {
        if(type.equals("qq"))
        {
            return new Qq();
        }
        else if(type.equals("wx"))
        {
            return new Weixin();
        }
        else
        {
            return null;
        }
    }
}
复制代码

具体用法

复制代码
/**
 * @author ieasy360_1
 *
 */
public class Test1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SenderFactory factory = new SenderFactory();
        Sender sender = factory.sendproduce("qq");
        sender.send();
    }
}
复制代码

运行得到的结果

this is qq send!

接着上篇文章的简单工厂模式,做以下修改,即可实现多个工厂方法模式

复制代码
/**
 * @author ieasy360_1
 * 工厂类
 */
public class SenderFactory {

//    public Sender sendproduce(String type)
//    {
//        if(type.equals("qq"))
//        {
//            return new Qq();
//        }
//        else if(type.equals("wx"))
//        {
//            return new Weixin();
//        }
//        else
//        {
//            return null;
//        }
//    }
    public Sender qqsend()
    {
        return new Qq();
    }
    public static Sender weixinsend()
    {
        return new Weixin();
    }
}
复制代码

具体调用,一个是采用静态方法调用

复制代码
/**
 * @author ieasy360_1
 *
 */
public class Test1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SenderFactory factory = new SenderFactory();
        Sender sender = factory.qqsend();
        sender.send();

          Sender sender1 = SenderFactory.weixinsend();
          sender1.send();


    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值