java设计模式,工厂模式

第一种:普通工厂
第二种:多个工厂
第三种:静态工厂
①普通工厂
package com.dasenlin.factory;
/**
 * 工厂模式普通工厂
 * @author Administrator
 *
 */
public class OrdinaryFactory {

    public static void main(String[] args) {
        SendFactory factory =new SendFactory();
        Sender sender=factory.produce("mail");
            sender.send();
    }

}
/**
 * 共同的接口
 * @author Administrator
 *
 */
interface Sender{
    public void send();
}
/**
 * 实现的邮箱发送
 * @author Administrator
 *
 */
class MailSender implements Sender{

    @Override
    public void send() {
        System.out.println("我是邮箱发送的数据de实现");
    }
}
/**
 * 实现的Msn发送
 * @author Administrator
 *
 */
class MsnSender implements Sender{

    @Override
    public void send() {
        System.out.println("我是MSN发送的数据de实现");
    }
 }
/**
 * 创建工厂
 * @author Administrator
 *
 */
class SendFactory{

    public Sender produce(String type){
        if("mail".equals(type)){
            return new MailSender();
        }else if("msn".equals(type)){
            return new MsnSender();
        }else{
            System.out.println("请输入正确的发送类型");
            return null;
        }
    }
}
②多个工厂
package com.dasenlin.factory;
/**
 * 多个工厂,修改下工厂类就可以了
 * @author Administrator
 *
 */
public class ManyFactory {

    public static void main(String[] args) {
        SendFactory2 product2 =new SendFactory2();
        Sender2 sender2=product2.qqSenderProduce();
        sender2.send();

        Sender2 sender =product2.weixinSenderProduce();
        sender.send();
    }

}
/**
 * 发送的接口
 * @author Administrator
 *
 */
interface Sender2{
    public void send();
}
/**
 * QQ发送的实现类
 * @author Administrator
 *
 */
class QQSender implements Sender2{

    @Override
    public void send() {
        System.out.println("QQ");
    }
} 
/**
 * 微信发送的实现类
 * @author Administrator
 *
 */
class WeixinSender implements Sender2{

    @Override
    public void send() {
        System.out.println("WeiXin");
    }
}
/**
 * 工厂发射类中的多个工厂
 */
class SendFactory2{
    /**
     * qq发射工厂   
     * @return
     */
    public Sender2 qqSenderProduce(){
        return new QQSender();
    }
    public Sender2 weixinSenderProduce(){
        return new WeixinSender();
    }
}
③静态工厂
package com.dasenlin.factory;
/**
 * 静态工厂方法模式,是在多个工厂方法的基础上,添加为静态方法,可以直接调用而无需实例化
 * @author Administrator
 *工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。
 *在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,
 *所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
 */
public class StaticFactory {

    public static void main(String[] args) {
        Sender3 sender3=SendFactory3.qqSenderProduce();
        sender3.send();
    }

}
/**
 * 发送的接口
 * @author Administrator
 *
 */
interface Sender3{
    public void send();
}
/**
 * QQ发送的实现类
 * @author Administrator
 *
 */
class QQSender2 implements Sender3{

    @Override
    public void send() {
        System.out.println("QQ");
    }
} 
/**
 * 微信发送的实现类
 * @author Administrator
 *
 */
class WeixinSender2 implements Sender3{ 

    @Override
    public void send() {
        System.out.println("WeiXin");
    }
}
/**
 * 工厂发射类中的多个工厂
 */
class SendFactory3{
    /**
     * qq发射工厂   
     * @return
     */
    public static Sender3 qqSenderProduce(){
        return new QQSender2();//再建一个工厂的话,则需要在修改工厂类,违背了闭包原则
    }
    public static Sender3 weixinSenderProduce(){
        return new WeixinSender2();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值