创建型模式----抽象工厂模式

来源:互联网 发布:itsm开源软件 编辑:程序博客网 时间:2024/05/15 00:03

1、抽象工厂模式

         简单工厂模式存在的问题:

                    类实例的创建依赖工厂类,也就是说,如果想拓展程序,必须对工厂类进行修改,这违背了闭包原则。

            那如何解决呢??

                   通过抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

  

     关键点是:通过抽象工厂类创建多个工厂类。(产品通过工厂类来生成,而生成产品的对应的工厂类通过抽象类来生成:一个工厂类对应一种具体的产品)

 

   实例一:

     产品类

  

public interface Sender {public void send();}public class MailSender implements Sender {@Overridepublic void send() {System.out.println(" ~~~   MailSender ~~~~");}}public class SmsSender implements Sender {@Overridepublic void send() {System.out.println(" ~~~~ SmsSender ~~~");}}


    定义抽象工厂,以及根据产品创建的对应的工厂类

public interface AbstractFactory {public Sender producter();}public class MailSenderFactory implements AbstractFactory {@Overridepublic Sender producter() {return new MailSender();}}public class SmsSenderFactory implements AbstractFactory {@Overridepublic Sender producter() {return new SmsSender();}}


  模拟使用:

public static void main(final String[] args) {final AbstractFactory factory = new MailSenderFactory();factory.producter().send();final AbstractFactory factory2 = new SmsSenderFactory();factory2.producter().send();}

 

    如果此时需要拓展一个发送word文档的类,则不必修改已有代码,直接对其进行新增对应的工厂即可

  

    

// 新增的工作簿发送产品public class WordSender implements Sender {@Overridepublic void send() {System.out.println(" ~~~~ WordSender ~~~~");}}// 新增对应的创建工厂public class WordSenderFactory implements AbstractFactory {@Overridepublic Sender producter() {return new WordSender();}}public static void main(final String[] args) {final AbstractFactory factory = new MailSenderFactory();factory.producter().send();final AbstractFactory factory2 = new SmsSenderFactory();factory2.producter().send();// 模拟使用final AbstractFactory factory3 = new WordSenderFactory();factory3.producter().send();}

 

原创粉丝点击