(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 接口。即可在不修改其他代码的前提的下拓展出一个新的功能
只要坚持不懈,未来一定会更好!

浙公网安备 33010602011771号