java设计模式之抽象工厂设计模式

来源:互联网 发布:linux cp文件夹 编辑:程序博客网 时间:2024/06/06 00:55

抽象工厂模式:

这个模式的好处就是,如果你现在想增加一个功能:发及时信息,则只需做一个实现类,实现Sender接口,

同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。这样做,拓展性较好!

就是采用多态的思想将工厂方法模式进行了改造

设计步骤:

第一步:创建一个接口Sender,在接口中提供实现类中共有的方法send

第二步:创建第一个实现类SmsSender,实现接口Sender

第三步:创建另一个实现类MailSender,实现接口Sender

第四步:创建一个工厂接口Provider,在接口中提供实现工厂共有的方法produce

第五步:创建工厂接口的第一个实现类SmsSenderFactory,实现Provider接口,用于创建smsSender的类对象

第六步:创建工厂接口的第一个实现类MailSenderFactory,实现Provider接口,用于创建MailSender的类对象

具体编码实现:

创建一个接口Sender,在接口中提供实现类中共有的方法send

/**

* 创建一个接口Sender,在接口中提供实现类中共有的方法send

*

* @author zdliu

*

*/

public interface Sender {

/**

* 实现类中共有的方法send

*/

public void send();

}

创建第一个实现类SmsSender,实现接口Sender

/**

* 创建第一个实现类SmsSender,实现接口Sender

*

* @author zdliu

*

*/

public class SmsSender implements Sender {

@Override

public void send() {

System.out.println("sms....");

}

}

创建另一个实现类MailSender,实现接口Sender

/**

* 创建另一个实现类MailSender,实现接口Sender

*

* @author zdliu

*

*/

public class MailSender implements Sender {

@Override

public void send() {

System.out.println("mail...");

}

}

创建一个工厂接口Provider,在接口中提供实现工厂共有的方法produce

/**

* 创建一个工厂接口Provider,在接口中提供实现工厂共有的方法produce

*

* @author zdliu

*

*/

public interface Provider {

/**

* 工厂共有的方法produce

*/

public Sender produce();

}

创建工厂接口的第一个实现类SmsSenderFactory,实现Provider接口,用于创建smsSender的类对象

/**

* 创建工厂接口的第一个实现类SmsSenderFactory,实现Provider接口,用于创建smsSender的类对象

*

* @author zdliu

*

*/

public class SmsSenderFactory implements Provider {

@Override

public Sender produce() {

return new SmsSender();

}

}

创建工厂接口的第一个实现类MailSenderFactory,实现Provider接口,用于创建MailSender的类对象

/**

* 创建工厂接口的第一个实现类MailSenderFactory,实现Provider接口,用于创建MailSender的类对象

*

* @author zdliu

*

*/

public class MailSenderFactory implements Provider {

@Override

public Sender produce() {

return new MailSender();

}

}

测试类如下:

public class Test {

public static void main(String[] args) {

// 测试SmsSenderFactory

new SmsSenderFactory().produce().send();

// 测试MailSenderFactory

new MailSenderFactory().produce().send();

}

}

控制台输出结果为:

sms....

mail...


关注微信公众号 java刘振东或者搜索java-lzd获取更多内容




0 0
原创粉丝点击