"工厂模式"-之Java,Android面试必问设计模式(1/9)

1.工厂方法模式:分三种


这是我给大家介绍的8个面试必问的设计模式的第一类:工厂模式.学完这8类必会的那么面试就不会有什么问题了,其余的无非都是多态的演变.好的开始讲解第一类:


  • 1.普通工厂

        建立一个工厂类,对"实现同一接口"的一些类进行实例的创建.
    
  • 2.多个工厂

        在普通的基础上,如果传递的字符串出错,就不能创建,并提供多个工厂方法,分别创建对象.
    
  • 3.静态工厂方法

        将多个工厂的方法改成"静态",不用创建实例,直接调用即可
    

1.普通工厂:
    /**
     * 普通工厂类:
     * 1.一个接口
     * 2.多个具体实现了接口的"类"
     * 3.创建一个发送信息"工厂类"
     *      包含一个统一的方法:对实现了"同一接口的类",进行实例的创建.
     */
    //发送接口
    interface Send {
        public void send();
    }

    //发送短信类,实现发送类
    class SendMessage implements Send {

        @Override
        public void send() {
            System.out.println("发送了 短信...");
        }
    }
    //发送邮件类,实现发送类
    class SendEmail implements Send {

        @Override
        public void send() {
            System.out.println("发送了 邮件...");
        }
    }
    //发送工厂类
    class SendFactory {
        public Send method(String type) {
            //根据传值的不同进行判断,得到不同的对象.
            if ("message".equals(type)) {
                return new SendMessage();
            }
            else if ("email".equals(type)) {
                return new SendEmail();
            } else {
                System.out.println("输入类型不正确");
                return null;
            }
        }
    }   
    //测试类:
    public class Test {
        public static void main(String[] args) {
            SendFactory sf = new SendFactory();
            final Send email = sf.method("email");
            email.send();
            final Send message = sf.method("message");
            message.send();
            final Send phone = sf.method("phone");
            if (phone != null) {
                phone.send();
            }
        }
    }

打印结果:

发送了 邮件...
发送了 短信...
输入类型不正确

2.多个工厂模式:
    /**
     * 多个工厂类:
     * 1.(Ps)在普通的基础上加上升级:每个实例"都创建"对应的方法
     * 2.后续直接调用对应方法即可,防止了输入字符串出错
     */
    public class SendFactory {
        //指指定的多个方法,防止出错
        public Send sendEmailmethod() {
            return new SendEmail();
        }

        public Send sendMessageMethos() {
            return new SendMessage();
        }
    }
//测试类:  
public class Test {
    public static void main(String[] args) {
        SendFactory sf = new SendFactory();
        //因为有选择了,所以不会出错
        final Send email = sf.sendEmailmethod();
        email.send();
        final Send message = sf.sendMessageMethos();
        message.send();
    }
}

打印结果:

发送了 邮件...
发送了 短信...

3.静态工厂模式:
    /**
     * 就改成个静态即可.
     * (Ps+)在多个工厂的基础上,把工厂的中的方法改成静态,那么等下就不用new 工厂类了
     */
    //发送工厂类
    public class SendFactory {
        //指指定的多个方法,防止出错
        //只需把这里改成static 方法即可
        public static Send sendEmailmethod() {
            return new SendEmail();
        }

        public static Send sendMessageMethos() {
            return new SendMessage();
        }
    }
//测试类:
public class Test {
    public static void main(String[] args) {
        //因为是静态方法,所以直接调用即可,不用new 工厂类
        Send email = SendFactory.sendEmailmethod();
        email.send();
        final Send message = SendFactory.sendMessageMethos();
        email.send();
    }
}

打印结果:

发送了 邮件...
发送了 短信...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值