Java设计模式之抽象工厂模式
来源:互联网 发布:supreme淘宝正品店铺 编辑:程序博客网 时间:2024/04/29 21:24
一、概念描述
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象。
每个模式都是针对一定问题的解决方案。抽象工厂模式面对的问题是多产品等级结构的系统设计。
在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。
产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的CPU和ADM芯片的主板,组成一个家族。Intel的CPU和Intel芯片的主板,又组成一个家族。而这两个家族都来自于两个产品等级:CPU,主板。一个等级结构是由相同的结构的产品组成,示意图如下:
抽象工厂模式通常是用于创一族产品,并且这族产品分不同的等级;不同的具体工厂类生产不同等级的一族产品。
二、抽象工厂模式类图
抽象工厂模式也有四种角色:抽象工厂、具体工厂、抽象产品和具体产品。
可以看到产品族包括ProductA和ProductB两种产品,每个具体工厂都能生产这两种产品,只是ConcreteFactory1生产的等级为1的族产品;ConcreteFactory2生产的是等级为2的族产品。
三、一个实例
抽象工厂AbstractFactory—— Sender类:
package com.test.abstractfactory;public interface Sender { public void sender();}
抽象工厂实现类1——MailSender类:
package com.test.abstractfactory;public class MailSender implements Sender{ @Override public void sender() { System.out.println("this is mail sender!"); }}
抽象工厂实现类2——SmsSender类:
package com.test.abstractfactory;public class SmsSender implements Sender{ @Override public void sender() { System.out.println("this is sms sender!"); }}
再提供一个实现Sender 的接口:
package com.test.abstractfactory;public interface Provider { public Sender produce(); }
具体工厂ConcreteFactory1——SendMailFactory类:
package com.test.abstractfactory;public class SendMailFactory implements Provider{ @Override public Sender produce() { return new MailSender(); }}
具体工厂ConcreteFactory2——SendSmsFactory类:
package com.test.abstractfactory;public class SendSmsFactory implements Provider{ @Override public Sender produce() { return new SmsSender(); }}
测试主类:
package com.test.abstractfactory;public class Test { public static void main(String[] args) { Provider mailProvider = new SendMailFactory(); Sender mailSender = new MailSender(); mailSender.sender(); Provider smsProvider = new SendSmsFactory(); Sender smsSender = new SmsSender(); smsSender.sender(); }}
运行结果:
this is mail sender!this is sms sender!
抽象工厂模式的好处就是,如果你现在想增加一个功能:发语音信息,只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需改动现成的代码。
这样做,拓展性较好!
代码如下:
抽象工厂实现类3——MailSender类:
package com.test.abstractfactory;public class TTSSender implements Sender{ @Override public void sender() { System.out.println("this is tts sender!"); }}
具体工厂ConcreteFactory3——SendTtsFactory类:
package com.test.abstractfactory;public class SendTtsFactory implements Provider{ @Override public Sender produce() { return new TTSSender(); }}
测试主类:
package com.test.abstractfactory;public class Test { public static void main(String[] args) { Provider mailProvider = new SendMailFactory(); Sender mailSender = new MailSender(); mailSender.sender(); Provider smsProvider = new SendSmsFactory(); Sender smsSender = new SmsSender(); smsSender.sender(); Provider ttsProvider = new sendTtsFactory(); Sender ttsSender = new TTSSender(); ttsSender.sender(); }}
执行结果:
this is mail sender!this is sms sender!this is tts sender!
参考:
http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
http://blog.csdn.net/liruikqn/article/details/12888511
http://www.cnblogs.com/devinzhang/archive/2011/12/19/2293160.html
http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- 【Java设计模式】之抽象工厂模式
- java设计模式 之 抽象工厂模式
- Java--设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- 设计模式之JAVA----抽象工厂模式
- java设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式之抽象工厂模式
- 《Java设计模式》之抽象工厂模式
- Java设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式之抽象工厂模式
- 密集负载下的网卡中断负载均衡smp affinity及单队列RPS
- NI-VISA在C#中总是报错完成操作前已过期。VISA-1073807339(0xBFFF0015)ErrorTimeout
- FFMPEG中最关键的结构
- java nio原理和通信模型
- php 项目性能优化
- Java设计模式之抽象工厂模式
- 数据库面试常问的一些基本概念
- 如何使用Qt Creator生成带图标的exe文件
- 读取 cpu百分比 进程占用cpu百分比的JAVA实现方式
- 优化SQL的建议
- 线性表数据结构解读(二)链式存储结构LinkedList
- How to print out more than 20 items (documents) in MongoDB's shell?
- zookeeper 集群配置
- Android可触屏操作的控件DragTableView