java设计模式之 工厂模式Factory
好比某种套路,经过不断实践,证明对项目结构非常有利
如果需要获取某种对象,如同获取不同的产品
需要由工厂来提供,工厂模式
可能的类或者对象:工厂类 产品:Cat Dog Fish ...
//动物工厂 专门用于获取动物实例
class AnimalFactory{
public static Animal getAnimal(int msg){
Animal a1 = null;
if(msg == 1){
a1 = new Cat();
}else if(msg == 2){
a1 = new Dog();
}else if(msg == 3){
a1 = new Fish();
}else{
System.out.println("无效的消息!");
}
return a1;
}
}
如何使用:
实际应用中,代码只和工厂AnimalFactory、父类Animal有关,而与具体的子类无关。更加通用,降低了代码的耦合度。
main: Animal a1 = AnimalFactory.getAnimal(1);
Animal a2 = AnimalFactory.getAnimal(2);
原先代码:和具体子类Cat和Dog有关 耦合度高
Animal a1 = new Cat();
Animal a2 = new Dog();
(3)一视同仁
需求:让所有的动物吃"哈根达斯"
a1.eat("哈根达斯");
a2.eat("哈根达斯");
a3.eat("哈根达斯");
...
如果用数组将所有的动物管理起来?
Cat[] Dog[]
Fish[] ...
只要一个数组:
Animal[] 可以管理任何Animal以及子类对象
任何的子类 is-a
Animal
Animal[]
as = new Animal[5];
as[0] =
new Cat(101, "加菲猫", 3);
as[1] =
new Cat(102, "汤姆猫", 1);
as[2] =
new Dog(103, "史努比", 5);
as[3] =
new Fish(104, "沙丁鱼", 2);
as[4] =
new Mouse(105, "米老鼠", 3);
for(int
i=0; i<as.length; i++){
as[i].eat("哈根达斯");
}
满足:多态定理2 元素认为Animal类型 Animal[]
多态定理3
最新文章
- R - MQ
- 开源WinForms界面开发框架Management Studio 选项卡文档 插件 Office 2007蓝色风格 后台线程
- ubuntu apt常用命令
- 在VS 2015中边调试边分析性能
- 【BZOJ】1059: [ZJOI2007]矩阵游戏(二分图匹配)
- 【iCore2 双核心板视频教程一】iM_LAN 100M 以太网模块UDP例程(包含视频教程)
- IOS的工程目录结构和生命周期
- 匿名函数中undefined形参疑问(转载)
- 运用mapreduce计算tf-idf
- 配置tomcat及如何自动编译jsp文件
- Git的安装与配置
- python序列化与反序列化(json与pickle)
- 前端上传图片回显并用base64编码,后端做解码储存,存储图片路径在.properties文件中配置(以上传身份证照片为例)
- .NET CORE 实践(3)--Visual Studio 2015 Update 3更新之后DotNetCore.1.0.1-VS2015Tools.Preview2.0.2.exe无法正确安装
- JavaSE | 接口| 枚举| 注释| 异常
- codeforces-707 C. Pythagorean Triples
- js前端使用jOrgChart插件实现组织架构图的展示
- js里获取页面高度和文档高度
- docker swarm 搭建及跨主机网络互连案例分析
- ASP入门(十五)- Global.asa