首页 > 编程语言 > 详细

java实现23种设计模式之普通工厂模式和抽象工厂模式

时间:2019-04-19 17:55:37      阅读:163      评论:0      收藏:0      [点我收藏+]
package com.ceshi2;

/**
 * 举一个发送邮件和短信的例子
 * @author Administrator
 *
 */
public interface Sender {
    public void Send();
}

创建一个接口,分别有短信和邮件实现这个接口

package com.ceshi2;

public class MailSender implements Sender{

    @Override
    public void Send() {
        System.out.println("this is mail sender");
    }

}
package com.ceshi2;

public class SmsSender implements Sender{

    @Override
    public void Send() {
        System.out.println("this is sms sender");
    }

}

创建一个静态工厂方法模式,可以在调用的时候不用对工厂类实例化

package com.ceshi2;

public class SendFactory {
    
    public static Sender produceMail(){
        return new MailSender();
    }
    
    public static Sender produceSms(){
        return new SmsSender();
    }
}

测试

package com.ceshi2;

public class FactoryTest {  
      
    public static void main(String[] args) {      
        Sender sender = SendFactory.produceMail();  
        sender.Send();  
    }  
}

结果:技术分享图片

想想普通工厂模式,假如需要新建立一个发送传真的方法呢。

需要先建立一个实现接口的类,然后在工厂类使用方法进行实例化。这就需要对工厂类进行修改,违背了闭包原则。

所以可以用

抽象工厂模式(Abstract Factory)

接口和实现类不做修改,新建一个接口和两个工厂类

package com.ceshi2;

public interface Provider {
    public Sender produce();
}
package com.ceshi2;

public class SendMailFactory implements Provider {
    @Override
    public Sender produce() {
        return new MailSender();
    }
}
package com.ceshi2;

public class SendSmsFactory implements Provider{
    @Override
    public Sender produce() {
        return new SmsSender();
    }
}
public class Test {

    public static void main(String[] args) {
        Provider provider = new SendMailFactory();
        Sender sender = provider.produce();
        sender.Send();
    }
}

这样,每次调用的时候就不用去修改,只需要新增即可

java实现23种设计模式之普通工厂模式和抽象工厂模式

原文:https://www.cnblogs.com/zhengyuanyuan/p/10737441.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!