工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
工厂方法模式的角色分布以及各角色的职责:
抽象工厂角色(Factory):这是工厂方法模式的核心,是具体工厂角色必须实现的接口或者必须继承的父类。在java中由抽象类或者接口来实现。
具体工厂角色(Concrete Factory):它含有和具体业务逻辑有关的代码,由应用程序调用以创建对应的具体产品的对象。
抽象产品角色(Product):它是具体产品继承的父类或者是实现的接口。在java中一般由抽象类或者接口来实现。
具体产品角色(Concrete Product):具体工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。在java中由具体的类来实现。
工厂方法模式的代码实例:
1,创建抽象工厂角色
public interface SenderFactory {
public Sender producer();
}
2,创建具体工厂角色
public class MailSenderFactory implements SenderFactory{
public Sender producer(){
return new MailSender();
}
}
public class SmsSenderFactory implements SenderFactory{
public Sender producer(){
return new SmsSender();
}
}
3,创建抽象产品角色
public interface Sender {
public void send();
}
4,创建具体产品角色
public class MailSender implements Sender{
public void send(){
System.out.println("Mail Sender!");
}
}
public class SmsSender implements Sender{
public void send(){
System.out.println("Sms Sender!");
}
}
5,测试
public class FactoryTest {
public static void main(String[] args){
SenderFactory senderFactory = new SmsSenderFactory();
Sender sender = senderFactory.producer();
sender.send();
}
}
输出结果:Sms Sender!