工厂模式

  1. 简单工厂和静态工厂模式
  • 流程:定义接口——>定义接口的实现类——>定义工厂生产产品
public interface Sender {
    void send();
}
public class MailSender implements Sender {
    @Override
    public void send() {
        System.out.println("this is mail sender");
    }
}
public class SmsSender implements Sender {
    @Override
    public void send() {
        System.out.println("this is Sms sender");
    }
}

class SendFactory {

    /**
     * 静态工厂的方法
     *
     * @return
     */
    static MailSender getMailSender() {
        return new MailSender();
    }

    /**
     * 静态工厂的方法
     *
     * @return
     */
    static SmsSender getSmsSender() {
        return new SmsSender();
    }

    /**
     * 普通工厂的方法
     *
     * @param type
     * @return
     */
    Sender produce(String type) {
        switch (type) {
            case "mail":
                return new MailSender();
            case "sms":
                return new SmsSender();
            default:
                return null;
        }
    }
}


public class FactoryTest {
    public static void main(String args[]) {

        //普通工厂
        SendFactory factory = new SendFactory();
        Sender sms = factory.produce("sms");
        sms.send();
        System.out.println("----------------");
        Sender mail = factory.produce("mail");
        mail.send();

        //静态工厂
        MailSender mailSender = SendFactory.getMailSender();
        mailSender.send();

        SmsSender smsSender = SendFactory.getSmsSender();
        smsSender.send();
    }
}
  1. 抽象工厂模式
  • 流程:定义方法接口——>定义方法接口的实现类——>定义工厂类接口——>定义工厂类
public interface Sender {
    void send();
}
public class MailSender implements Sender {
    @Override
    public void send() {
        System.out.println("this is mail sender");
    }
}
public class SmsSender  implements Sender{

    @Override
    public void send() {
        System.out.println("this is sms sender");
    }
}
public interface Provider {
    Sender produce();
}
public class MailFactory implements Provider {
    @Override
    public Sender produce() {
        return new MailSender();
    }
}
public class SmsFactory implements Provider {
    @Override
    public Sender produce() {
        return new SmsSender();
    }
}
public class AbsFactoryTest {
    public static void main(String args[]) {
        Provider smsProvider = new SmsFactory();
        Sender smsProduce = smsProvider.produce();
        smsProduce.send();
        //也可以
        smsProvider.produce().send();

        Provider mailProvider = new MailFactory();
        Sender mailProduce = mailProvider.produce();
        mailProduce.send();
        //也可以
        mailProvider.produce().send();

    }
}

建议用抽象工厂模式,便于以后的拓展

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.下载代码: repo init -u //home/user/***/manifest -b develop-...
    天天笔记阅读 376评论 0 0
  • 腊月廿五,是小哥哥新婚的日子。 大哥哥廿二就回家了。想着大哥哥、小哥哥的婚事一直是伯母的心结,先是操心大哥哥,眼看...
    Guluy阅读 247评论 0 0