java23种设计模式之一——工厂模式

1.普通工厂模式

普通工厂模式是创建一个工厂,对实现同一个接受的不同类,根据参数进行实例的创建。

举例:设计发送邮件和短信的例子

首先,创建共同的接口

public interface Sender{

 public void Send();  

}

其次,创建两个实现类,分别实现发送邮件和短信

public class MailSender implenments Sender(){

@override

public void send(){

System.out.println("this is a mail sender");

}

}

public class SmsSender implenments Sender(){

@override
public void send(){
System.out.println("this is a sms sender");
}
}
最后创建工厂类,根据不同参数创建不同的Sender类
pubic class SendFactory(){
public Sender produce(String type){
if(" mail".equals(type)){
return new  MailSender();
}else if("sms".equals( type)){
return new SmsSender();
}else{
System.out.println(" 请输入正确的类型!");
return null;
}
}
}
测试类:
public class  FactoryTest(){
public static void main(String [] args){
SendFactory factory = new SendFactory();
Sender sender = factory.produce("mail");
sender.sender();
}
}
输出:this is mail sender
2.多个工厂方法模式
对于普通工厂模式中,如果参数传递出错,那么就不能成功创建对象,多个工厂方法模式就是对这一弊端的改进。
直接改进工厂类,如下
pubic class SendFactory(){
public Sender  produceMail(){
return new MailSender();
}
public Sender produceSms(){
return new  SmsSender();
}
}
测试类如下:
public class FactoryTest(){
public static void main(String [] args){
SendFactory factory = new SendFactory();
Sender sender = factory.produceMail();
sender.sender();
}
}
输出:this is  mail sender
3.静态工厂方法模式
将工厂类中的两个方法改成静态的,不需要创建工厂对象,直接可以调用
修改工厂类方法为静态
pubic class SendFactory(){
public static Sender produceMail(){
return new MailSender();
}
public static  Sender produceSms(){
return new SmsSender();
}
}
测试类如下:
public class FactoryTest(){
public static void main(String [] args){
Sender sender =SendFactory.produceMail();
sender.sender();
}
}
输出:this is  mail sender
总体而言,凡是出现了大量的不同分类的产品需要创建,我们可以通过工厂模式来进行创建,第一种模式如果传入的字符有误则不能创建成功,第三种可以不需要创建对象直接创建对象。通常采用第三种。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值