(2)Java设计模式-抽象工厂模式

  前文叙述过工厂方法模式,但是其有一个弊端,就是其过于依赖工厂类,也就是说,如果你想对程序进行拓展,就必须对工厂类进行修改。这违反了闭包原则(开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。)然而抽象工厂就能解决这个问题,创建多个工厂类。每个工厂类只生产一个实现类对象,这样每次拓展程序,就可以直接添加新的工厂类,不需要修改以前的代码。

  

1 //共同实现的接口
2 public interface Sender {
3     void send();
4 }
1 //实现类
2 public class MailSender implements Sender {
3 
4     @Override
5     public void send() {
6         System.out.println("mail send");
7     }
8 
9 }
1 //实现类
2 public class MessageSender implements Sender {
3 
4     @Override
5     public void send() {
6         System.out.println("message sender");
7     }
8 
9 }
1 //工厂接口
2 public interface Provider {
3     Sender getObject();
4 }
1 //工厂接口实现类
2 public class SendMailFactory implements Provider {
3 
4     @Override
5     public Sender getObject() {
6         return new MailSender();
7     }
8 
9 }
1 //工厂接口实现类
2 public class SendMassageFactory implements Provider {
3 
4     @Override
5     public Sender getObject() {
6         return new MessageSender();
7     }
8 
9 }

  测试类方法

 1 public class test {
 2     public static void main(String[] args) {
 3         Provider pro0 = new SendMailFactory();
 4         Sender fac0 = pro0.getObject();
 5         fac0.send();
 6         Provider pro1 = new SendMassageFactory();
 7         Sender fac1 = pro1.getObject();
 8         fac1.send();
 9     }
10 }

  运行结果

mail send
message sender

通过代码,可以发现,若果我们想增加一个生产对象,只需要创建一个实现类,并实现sender接口,同时增加一个工厂类实现Provider 接口。即可在不修改其他代码的前提的下拓展出一个新的功能

posted @ 2017-03-23 17:01  祥哥37073  阅读(122)  评论(0)    收藏  举报