好比某种套路,经过不断实践,证明对项目结构非常有利

如果需要获取某种对象,如同获取不同的产品

需要由工厂来提供,工厂模式

可能的类或者对象:工厂类  产品: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

最新文章

  1. R - MQ
  2. 开源WinForms界面开发框架Management Studio 选项卡文档 插件 Office 2007蓝色风格 后台线程
  3. ubuntu apt常用命令
  4. 在VS 2015中边调试边分析性能
  5. 【BZOJ】1059: [ZJOI2007]矩阵游戏(二分图匹配)
  6. 【iCore2 双核心板视频教程一】iM_LAN 100M 以太网模块UDP例程(包含视频教程)
  7. IOS的工程目录结构和生命周期
  8. 匿名函数中undefined形参疑问(转载)
  9. 运用mapreduce计算tf-idf
  10. 配置tomcat及如何自动编译jsp文件
  11. Git的安装与配置
  12. python序列化与反序列化(json与pickle)
  13. 前端上传图片回显并用base64编码,后端做解码储存,存储图片路径在.properties文件中配置(以上传身份证照片为例)
  14. .NET CORE 实践(3)--Visual Studio 2015 Update 3更新之后DotNetCore.1.0.1-VS2015Tools.Preview2.0.2.exe无法正确安装
  15. JavaSE | 接口| 枚举| 注释| 异常
  16. codeforces-707 C. Pythagorean Triples
  17. js前端使用jOrgChart插件实现组织架构图的展示
  18. js里获取页面高度和文档高度
  19. docker swarm 搭建及跨主机网络互连案例分析
  20. ASP入门(十五)- Global.asa

热门文章

  1. C#根据函数名称执行对应的函数
  2. c# 自定义位数生成激活码
  3. ios9配置info.plist中关于安全访问问题
  4. Weka回归
  5. 模拟app上商品详情点击图片放大并且可以切换大图
  6. 论山寨手机与Android 【11】移动网络规范的合纵连横
  7. Delphi代码中嵌入ASM代码
  8. Android 使用PopupWindow实现弹出菜单
  9. java双线程调用同一个对象+锁
  10. 【思路解析】discuz 帖子设置封面 setthreadcover 表pre_forum_threadimage