设计模式---工厂模式和抽象工厂模式
2.工厂方法模式(Factory Method)
简单工厂模式的一个缺点就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以 ,从设计角度考虑,有一定的问题。此时就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接添加新的工厂类就可以了,不需要修改之前的代码。
/*发送邮件的例子*/
//首先,创建二者的共同接口
public interface Sender{
public void send();
}
//创建,实现类
public class MailSender implements Sender{
@Override
public void send(){
System.out.println("this is mailSender");
}
}
public class SmsSender implements Sender{
@Override
public void send(){
System.out.println("this is smsSender");
}
}
//创建工厂接口
public interface Provider{
public Sender produce();
}
public class SendMailFactory implements Provider{
public Sender produce(){
return new MailSender();
}
}
public class SendSmsFactory implements Provider{
public Sender produce(){
return new SmsSender();
}
}
//工厂模式测试类
public class FactoryTest{
Provider provider =new SendMailFactory();
Sender sender=provider.produce();
sender.send();
}
这个模式的好处就是,如果你现在想增加一个功能:发及时消息,则只需要做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK,无需去改现有的代码。拓展性较好。
3.抽象工厂模式
工厂方法模式和抽象工厂模式不好分清楚,区别如下:
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体的产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体的产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。