设计模式-创建型模式#抽象工厂AbstractFactory
2015-06-09 23:43
369 查看
上一篇 工厂方法FactoryMethod 写了之后感觉要写就该把这PDF上的23种常用设计模式都写完,所以今天又花了时间写了一篇,其实这些都是照着书上打的,没有任何的新鲜之处。
抽象工厂
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体的类。
适用性
1、一个系统要独立于它的产品的创建、组合和表示时。
2、一个系统要由多个产品系列的一个来配置时。
3、当你提供一个产品类库,而只想显示它们的接口而不是实现时。
4、当你要强调一系列相关的产品对象的设计以便进行联合使用时。
参与者
1、AbstractFactory
声明一个创建抽象产品对象的操作接口。
2、ConcreteFactory
实现创建具体产品对象的操作。
3、AbstractProduct
为一类产品对象声明一个接口。
4、ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。
实现AbstractProduct接口。
5、Client
仅使用由AbstractFactory和AbstractProduct类声明的接口。
类图
![](http://img.blog.csdn.net/20150609235326444?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHhuMzk4MzA0MzU3MzE0MTU5MjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
控制台输出:
The black cat is eating!
The black dog is eating!
The white cat is eating!
The white dog is eating!
抽象工厂
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体的类。
适用性
1、一个系统要独立于它的产品的创建、组合和表示时。
2、一个系统要由多个产品系列的一个来配置时。
3、当你提供一个产品类库,而只想显示它们的接口而不是实现时。
4、当你要强调一系列相关的产品对象的设计以便进行联合使用时。
参与者
1、AbstractFactory
声明一个创建抽象产品对象的操作接口。
2、ConcreteFactory
实现创建具体产品对象的操作。
3、AbstractProduct
为一类产品对象声明一个接口。
4、ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。
实现AbstractProduct接口。
5、Client
仅使用由AbstractFactory和AbstractProduct类声明的接口。
类图
package com.dsp; public interface ICat { void eat(); }
package com.dsp; public class WhiteCat implements ICat { @Override public void eat() { System.out.println("The white cat is eating!"); } }
package com.dsp; public class BlackCat implements ICat { @Override public void eat() { System.out.println("The black cat is eating!"); } }
package com.dsp; public interface IDog { void eat(); }
package com.dsp; public class BlackDog implements IDog { @Override public void eat() { System.out.println("The black dog is eating!"); } }
package com.dsp; public class WhiteDog implements IDog { @Override public void eat() { System.out.println("The white dog is eating!"); } }
package com.dsp; public interface IAnimalFactory { ICat createCat(); IDog createDog(); }
package com.dsp; public class BlackAnimalFactory implements IAnimalFactory { @Override public ICat createCat() { // TODO Auto-generated method stub return new BlackCat(); } @Override public IDog createDog() { // TODO Auto-generated method stub return new BlackDog(); } }
package com.dsp; public class WhiteAnimalFactory implements IAnimalFactory { @Override public ICat createCat() { // TODO Auto-generated method stub return new WhiteCat(); } @Override public IDog createDog() { // TODO Auto-generated method stub return new WhiteDog(); } }
控制台输出:
The black cat is eating!
The black dog is eating!
The white cat is eating!
The white dog is eating!
相关文章推荐
- join查询
- Sql Server内置函数实现MD5加密
- struts2搭建
- 卡特兰数
- python 学习笔记(二)
- 循环-08. 二分法求多项式单根(20)
- 2015060908 - 为什么中国的程序员总被称为码农?
- 树莓派学习笔记之登录树莓派
- Asp的两个内置对象request和response
- Android系统启动流程
- PHP环境安装
- 黑马程序员--Java基础Day07
- maven 学习
- shell学习日志
- zookeeper节点数与watch的性能测试
- oracle 11g 忘记了sys,system,scott密码
- UVA - 455 Periodic Strings
- 循环-07. 爬动的蠕虫(15)
- ZOOKEEPER解惑
- 循环-06. 统计一行文本的单词个数(15)