设计模式——工厂模式(简单、静态、抽象)

       工厂模式属于设计模式中的建造者模式,它是用一个工厂来封装对象的创建,客户只需要知道所需产品的具体工厂,而无须知道具体工厂的创建产品的过程,甚至不需要知道具体产品的类名。可分为以下三类:

  • 简单工厂模式
  • 静态工厂模式
  • 抽象工厂模式

1.简单工厂模式

  • 概述:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
  • 实现方式:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
  • 缺点:增加功能修改的是工厂类。

代码实现:

功能:创建发送邮件和发送短信的对象,进行发送操作。

  • 定义发送操作的接口
public interface Sender {
    void send();
}
  • 定义具体的类去实现接口发送功能,来发送邮件和短信
public class MailSender implements Sender {
    @Override
    public void send() {
        System.out.println("发送邮件。。。。");
    }
}
public class SMSSender implements Sender {
    @Override
    public void send() {
        System.out.println("发送短信。。。。");
    }
}
  • 创建工厂类,用来实例化对象
public class SenderFactory {
    public Sender create(String type){
        if("Mail".equals(type)){
            return new MailSender();
        }else if("SMS".equals(type)){
            return new SMSSender();
        }
        return null;
    }
}
  • 测试类,进行测试
public class TestSender {
    public static void main(String[] args) {
       Sender mailSender=new SenderFactory().create("Mail");
       Sender sMSSender =new SenderFactory().create("SMS");
       mailSender.send();
       sMSSender.send();
    }
}

 

2.静态工厂模式

它是在简单工厂模式的基础上,对于SenderFactory类中的create方法加上了static修饰,使得在测试时,可以通过类名直接调用创建方法,一定程度上简化了代码。

 public static Sender create(String type){}

测试类做如下修改:

  Sender mailSender=SenderFactory.create("Mail");
  Sender sMSSender =SenderFactory.create("SMS");

对于简单工厂模式和静态工厂模式: 

       如果此时我们要再添加一个发送微信的对象,去发送微信,就得进入到SenderFactory工厂里的create方法,再加入一条else if语句,这样就大大违反了设计模式里的开闭原则,对此可以对SenderFactory做以下改进:

public class SenderFactory {
        
        public Sender createMailSender(){
            return new MailSender();
        }
        public Sender createSMSSender(){
            return new SMSSender();
        }
        
        //添加一个创建发送微信对象的方法
        public Sender createWechatSender(){
            return new WechatSender();
        }
    }
}

       这样在增加新功能时,我们就只需要在SenderFactory中增加一个方法,而不需要进入方法中去修改代码,一定程度改善了简单工厂模式。但还可以进行优化,这就引入了抽象工厂模式。

3.抽象工厂模式

       抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂,每个生成的工厂都能按照超级工厂模式提供对象。

代码实现:

  • 定义发送操作的接口、定义具体的类去实现接口发送功能,来发送邮件和短信(同简单工厂模式)
  • 创建抽象工厂类,定制一种模板。让其他工厂来继承,从而实例化对应对象
public  abstract class SenderFactory {
    public abstract Sender createSender();
}
  •  定义具体工厂,来创建某个具体对象的创建。
public class MailFactory extends SenderFactory {
    @Override
    public Sender createSender() {
        return new MailSender();
    }
}
public class SMSFactory extends SenderFactory{
    @Override
    public Sender createSender() {
        return new SMSSender();
    }
}
  • 编写测试代码
public class TestSender {
    public static void main(String[] args) {
       Sender mailSender= new MailFactory().createSender();
       Sender sMSSender = new SMSFactory().createSender();
       mailSender.send();
       sMSSender.send();
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值