欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

23种设计模式之工厂方法模式

程序员文章站 2024-01-05 17:14:22
...

工厂方法模式分三种:

     1.普通工厂方法模式

     2.多个工厂方法模式

     3.静态工厂方法模式


例:

  普通工厂方法模式:

/**
 * CLASSNAME:Sender
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * 电话:18665996821
 * DATE:2018/3/7 23:29
 * 描述1:  工厂方法模式-普通工厂方法模式
 * 描述2: 第一步:定义一个接口,写一个公共的抽象方法
 *
 */

public interface Sender {
    public void send();

}
/**
 * CLASSNAME:MailSender
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * 电话:18665996821
 * DATE:2018/3/8 23:41
 * 描述1:
 * 描述2:
 */

public class MailSender implements Sender {


    @Override
    public void send() {
        System.out.println("发送邮件");
    }
}
/**
 * CLASSNAME:SmsSender
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * 电话:18665996821
 * DATE:2018/3/8 23:44
 * 描述1: 工厂方法--普通工厂方法: 第二步,创建一个Sender实现类,实现它的方法
 * 描述2:
 */

public class SmsSender implements Sender {

    @Override
    public void send() {
        System.out.println("发送短信!");
    }
}
/**
 * CLASSNAME:SendFactory
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * 电话:18665996821
 * DATE:2018/3/8 23:47
 * 描述1: 第三步,创建工厂,根据传入的值,生产不同的产品
 * 描述2:
 */

public class SendFactory {
  public Sender produce(String type){
      if (type.equals("sms")){
          return new SmsSender();
      }else if(type.equals("mail")){
          return new MailSender();
      }else {
          return null;
      }
  }
}
/**
 * CLASSNAME:Test
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * DATE:2018/3/7 23:49
 * 描述1:普通工厂模式  第四步:检验结果,
 * 描述2:
 */

public class Test {

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

    }
}

例2:多个工厂方法模式:

   只需要对上面代码做少许更改

/**
 * CLASSNAME:SendFactory
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * 电话:18665996821
 * DATE:2018/3/8 23:47
 * 描述1: 第三步,创建工厂(多个工厂方法模式),根据传入的值,生产不同的产品
 * 描述2:
 */

public class SendFactory {

//    public Sender produce(String type) {
//        if (type.equals("sms")) {
//            return new SmsSender();
//        } else if (type.equals("mail")) {
//            return new MailSender();
//        } else {
//            return null;
//        }
//    }

    public Sender produceMail() {
        return new MailSender();
    }

    public Sender produceSms() {
        return new SmsSender();
    }
}

检验结果:

/**
 * CLASSNAME:Test
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * DATE:2018/3/7 23:49
 * 描述1:普通工厂模式  第四步:检验结果,
 * 描述2:
 */

public class Test {

    public static void main(String[] args) {
        //第一种 普通工厂方法模式
//        SendFactory factory = new SendFactory();
//        Sender sender = factory.produce("sms");
//        sender.send();

        //第二种:多个工厂方法模式
        SendFactory factory=new SendFactory();
        Sender sender = factory.produceMail();
        sender.send();

    }
}

 例3:静态工厂方法模式

/**
 * CLASSNAME:SendFactory
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * 电话:18665996821
 * DATE:2018/3/8 23:47
 * 描述1: 第三步,创建工厂(多个工厂方法模式),根据传入的值,生产不同的产品
 * 描述2:
 */

public class SendFactory {

//    public Sender produce(String type) {
//        if (type.equals("sms")) {
//            return new SmsSender();
//        } else if (type.equals("mail")) {
//            return new MailSender();
//        } else {
//            return null;
//        }
//    }

    //第二种:多个工厂方法模式
//    public Sender produceMail() {
//        return new MailSender();
//    }
//
//    public Sender produceSms() {
//        return new SmsSender();
//    }
    
    
    //第三种 静态工厂方法模式(简单理解,就是第一种和第二种的工厂方法上都加个静态即可:如下)
    public static Sender produce(String type){
                if (type.equals("sms")) {
                    return new SmsSender();
                } else if (type.equals("mail")) {
                    return new MailSender();
                } else {
                    return null;
                }
    }
}

验证结果:

/**
 * CLASSNAME:Test
 * AUTHOR:邓望保 lenovo
 * 邮箱:[email protected]
 * DATE:2018/3/7 23:49
 * 描述1:普通工厂模式  第四步:检验结果,
 * 描述2:
 */

public class Test {

    public static void main(String[] args) {
        //第一种 普通工厂方法模式
        //        SendFactory factory = new SendFactory();
        //        Sender sender = factory.produce("sms");
        //        sender.send();

        //第二种:多个工厂方法模式
        //        SendFactory factory=new SendFactory();
        //        Sender sender = factory.produceMail();
        //        sender.send();

        //第三种,静态工厂方法模式
        Sender sender = SendFactory.produce("sms");
        sender.send();
    }

}