java设计模式,工厂模式

来源:互联网 发布:oracle数据库卸载 编辑:程序博客网 时间:2024/06/11 03:13
第一种:普通工厂第二种:多个工厂第三种:静态工厂①普通工厂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();    }}
0 0
原创粉丝点击