• 设计模式总结篇系列:工厂方法模式(Factory Method)


    工厂方法模式适合于对实现了同一接口或继承了同一父类的一些类进行实例的创建。一般是通过定义一个工厂类,并在其方法中实现对具有上述特点的类对象的创建。

    根据具体产生类对象的方法定义形式,又可以将其分为普通工厂方法模式、多个工厂方法模式和静态工厂方法模式。

    一、普通工厂方法模式:

    常见的经典写法如下(以发送邮件和短信为例):

    1.定义邮件类和短信类具有的共同接口:

    1 interface Sender{
    2     
    3     public void sender();
    4     
    5 }

    2.定义邮件类和短信类:

    1 class MailSender implements Sender{
    2 
    3     @Override
    4     public void send() {
    5         System.out.println("发送邮件");
    6     }
    7     
    8 }
    1 class SmsSender implements Sender{
    2 
    3     @Override
    4     public void send() {
    5         System.out.println("发送短信");
    6     }
    7     
    8 }

    3.定义工厂类:

     1 class SenderFactory {
     2 
     3     public Sender produce(String type) {
     4         if (type.equals("mail")) {
     5             return new MailSender();
     6         } else if (type.equals("sms")) {
     7             return new SmsSender();
     8         } else {
     9             return null;
    10         }
    11     }
    12 
    13 }

    4.测试生成MailSender和SmsSender对象:

     1 package com.qqyumidi;
     2 
     3 public class FactoryMethodTest {
     4 
     5     public static void main(String[] args) {
     6         SenderFactory factory = new SenderFactory();
     7         Sender mailSender = factory.produce("mail");
     8         Sender smsSender = factory.produce("sms");
     9     }
    10 
    11 }

     

    二、多个工厂方法模式:

    将普通工厂模式中的工厂类中创建类的方法从依赖于参数判断改为直接针对每种对象各自定义一个生产方法。

    具体代码如下:

     1 class SenderFactory {
     2 
     3     public Sender produceMail(){
     4         return new MailSender();
     5     }
     6     
     7     public Sender produceSms(){
     8         return new SmsSender();
     9     }
    10 
    11 }

     

    三、静态工厂方法模式:

    静态工厂方法模式与前面两种具体的方法定义不同在于方法被定义成静态的,这样可以不通过创建工厂实例就能直接获取到目标类的对象。

     1 class SenderFactory {
     2 
     3     public static Sender produceMail(){
     4         return new MailSender();
     5     }
     6     
     7     public static Sender produceSms(){
     8         return new SmsSender();
     9     }
    10 
    11 }

     

    对于工厂方法模式,推荐使用第三种写法。

  • 相关阅读:
    15天学会jquery
    js常用方法
    js兼容注意事项--仅供参考
    Javascript面向对象特性实现封装、继承、接口详细案例
    关于sql用<>不等于查询数据不对问题
    解决document.onclick在IE下用不了或无效的问题
    解决Button设置disabled后无法执行后台代码问题
    利用Wireshark截取数据包,并对数据包进行解析
    导入本地文本中的数据到MySQL数据库中
    删除数据库中重复项
  • 原文地址:https://www.cnblogs.com/lwbqqyumidi/p/3744842.html
Copyright © 2020-2023  润新知