Java设计模式: 工厂模式

普通工厂:

public interface Sender {
	void send();  
}
public class SmsSender implements Sender {  
    @Override  
    public void send() {  
        System.out.println("SmsSender send()");  
    }
}
public class MailSender implements Sender {  
    @Override  
    public void send() {  
        System.out.println("MailSender send()");  
    }  
}
//工厂。
public class SendFactory {
	public Sender produce(String type) {
		if ("mail".equals(type)) {
			return new MailSender();
		} else if ("sms".equals(type)) {
			return new SmsSender();
		} else {
			return null;
		}
	}
}
public class Test {
	public static void main(String[] args) {
		try {
			Test test = new Test();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
	public Test() {
		SendFactory factory = new SendFactory();
		Sender sender = factory.produce("mail");
		sender.send();
	}
}

静态工厂模式

有时候,干脆把制造对象的方法写成静态,变成静态工厂模式

//工厂。
public class SendFactory {
	public static Sender produceMail() {
		return new MailSender();
	}
 
	public static Sender produceSms() {
		return new SmsSender();
	}
}
public class Test {
	public static void main(String[] args) {
		try {
			Test test = new Test();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
	public Test() {
		Sender sender = SendFactory.produceMail();
		sender.send();
	}
}

但是上述的工厂设计模式有一定问题,问题在于,增加一个新的产品线条,需要修改工厂中的多处代码。对上述代码修改,引入Provider 。

public interface Provider {
	Sender produce();
}
public class SendMailFactory implements Provider {  
    @Override  
    public Sender produce(){  
        return new MailSender();  
    }  
}
public class SendSmsFactory implements Provider{  
    @Override  
    public Sender produce() {  
        return new SmsSender();  
    }  
}
public class Test {
	public static void main(String[] args) {
		try {
			Test test = new Test();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
	public Test() {
		Provider provider = new SendMailFactory();  
        Sender sender = provider.produce();  
        sender.send();  
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值