NativeFactory。java

package com;
//定义 人有杀日本人 和 杀美国人两个方法
interface NativePerson{
 public void killAmeria();
 public void killJapan();
}
//中国人实现了人的接口
class NativeChinese implements NativePerson{
 //中国人杀美国人
 public void killAmeria() { 
  System.out.println("Chinese kill Ameria");
 }
 //中国人杀日本人
 public void killJapan() {
  System.out.println("Chinese kill Japan");
 }

}
//俄国人实现了人的接口
class NativeRussia implements NativePerson{
 public void killAmeria()
 {
  System.out.println("Russia kill Ameria");
 }
 public void killJapan()
 {
  System.out.println("Russia kill Japan");
 }
}
public class NativeFactory
{
 /**
  * 假如 我要添加朝鲜人 就不需要动前面的逻辑 只需要假如 i==2
   return new CX();就行了 我们不需要通过new 关键字去实例化了
   在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,
   这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误.
   这每个做过具体工作的人都深有体会,相反,
   官做得越高,说出的话越抽象越笼统,范错误可能性就越少.
   **/
 public static NativePerson getPerson(int i)
 {
  if(i==0)
   return new NativeChinese();
  else
   return new NativeRussia();
 }
 public static void main(String[] args) {
  NativePerson person=NativeFactory.getPerson(0);
  person.killAmeria();
  person.killJapan();
 }
}

UFOFactory.java

package com;

//定义 人有杀日本人 和 杀美国人两个方法
interface UFOPerson{
 public void killAmeria();
 public void killJapan();
}
//中国人实现了人的接口
class UFOChinese implements UFOPerson{
 //中国人杀美国人
 public void killAmeria() { 
  System.out.println("UFOChinese kill Ameria");
 }
 //中国人杀日本人
 public void killJapan() {
  System.out.println("UFOChinese kill Japan");
 }

}
//俄国人实现了人的接口
class UFORussia implements UFOPerson{

public void killAmeria()
 {
  System.out.println("UFORussia kill Ameria");
 }

public void killJapan()
 {
  System.out.println("UFORussia kill Japan");
 }
}
public class UFOFactory
{

public static UFOPerson getPerson(int i)
 {
  if(i==0)
   return new UFOChinese();
  else
   return new UFORussia();
 }
 public static void main(String[] args) {
  UFOPerson person=UFOFactory.getPerson(0);
  person.killAmeria();
  person.killJapan();
 }
}

AbstractFactory.java

/**
 * 假如现在有一个nativ工厂 又多了个UFO工厂 现在要同时生产不能中国人和俄国人
 * 其实就是多个工厂模式的联合 就是抽象工厂模式

有几个工厂要磨合成一个抽象工厂模式其实就很简单

添加一个抽象类  该抽象类中添加方法   分别用于获取 每个工厂的接口方法

工厂类中有几个方法 就产生几个工厂 继承抽象工厂   就行了
 */
abstract class CommonFactory {
 public abstract NativePerson getNativePerson();
 public abstract UFOPerson getUFOPerson();
}
class ChineseFactory extends CommonFactory {
 public NativePerson getNativePerson() {
  return new NativeChinese();
 }

public UFOPerson getUFOPerson() {
  return new UFOChinese();
 }
}

class RussionFactory extends CommonFactory {
 public NativePerson getNativePerson() {
  return new NativeRussia();
 }

public UFOPerson getUFOPerson() {
  return new UFORussia();
 }
}

642 924 975
1372

转载于:https://www.cnblogs.com/liaomin416100569/archive/2010/03/25/9331903.html

抽象工厂与工厂模式例子相关推荐

  1. C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)

    今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军.吕震宇 老师的文章更是堪称经典.他们的文笔如行云流水,例子活泼生动,讲解深入浅出.好在他们都是用C ...

  2. getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...

    文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...

  3. C++设计模式 | Factory工厂模式(简单工厂、工厂方法、抽象工厂)

    目录 简单工厂 工厂方法 抽象工厂 学习工厂模式需要有C++虚函数 纯虚函数等相关继承与多态知识 简单工厂 在简单工厂模式中,可以根据参数的不同返回不同的实例..简单工厂模式专门定义一个类来负责创建其 ...

  4. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

    工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...

  5. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  6. 设计模式学习笔记——抽象工厂(Abstract Factory)模式

    设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...

  7. 工厂模式(简单工厂,工厂方法,抽象工厂)

    工厂顾名思义就是创建产品,工厂分为三种:简单工厂,工厂方法,抽象工厂.该模式用于封装和管理对象的创建,是一种创建型模式. 1)简单工厂 该模式通过向工厂传递类型来指定要创建的对象 提供一个方法,根据类 ...

  8. Java工厂模式(简单工厂、工厂方法、抽象工厂)详解

    工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式.在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象. 1.工厂模式的理解 1.1.工厂模式的分类 工厂模 ...

  9. 【设计模式】Unity3D 简单工厂、工厂(方法)、抽象工厂模式

    创建型模式-工厂三兄弟 提示:个人学习总结,如有错误,敬请指正 文章目录 创建型模式---工厂三兄弟 一.简单工厂模式 1.简单工厂模式是什么? 2.UML图 3.实现方式 二.工厂(方法)模式 1. ...

  10. 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

最新文章

  1. 模板 - 有向图的连通性
  2. 成功解决mxnet.base.MXNetError: C:\Jenkins\workspace\mxnet-tag\mxnet\3rdparty\dmlc-core\src\io\local_file
  3. JZOJ 5640. 【NOI2018模拟4.9】劈配
  4. python权限管理系统_PMS:支持多应用的统一权限管理系统,用flask+vue实现
  5. python主线程有两个子线程、创建两个主函数_Python多任务之线程
  6. 获取Android版本信息和电话信息
  7. python mkdir -p_Python中的mkdir -p功能[复制]
  8. C 数据类型 常量 变量
  9. ATITIT提升效率 保持简单性 优化 简化 目录 1.1. 概念简单 1 1.2. 语言简单性 弱类型 动态变量 动态实体 1 1.3. 数据结构简单 arr 代替了array map s
  10. 计算机网络安全知识讲座新闻稿,我院开展网络安全与信息化建设讲座
  11. Jmeter之JSON Extractor
  12. iOS 设备的屏幕尺寸、分辨率及其屏幕边长比例详细情况
  13. Python 玫瑰花绘制
  14. Delphi变成小技巧——直接将excel当做表来显示
  15. 初学者完成HBuilder X网站制作
  16. Ubuntu开机一直滚屏 关键词:pcieport.......
  17. 谷歌账号被停用应该用什么方法进行找回(2022最新)
  18. Anaconda3 偏好设置
  19. Android P版本应用兼容性适配技术指导
  20. 6.7.1 机器人系统仿真/URDF、Gazebo与Rviz综合运用/机器人运动控制以及里程计信息显示

热门文章

  1. 在7分钟内深刻理解咖喱
  2. 调试代码遗留_陷入遗留代码地狱吗? 这里有一些想法可以帮助您处理情况
  3. fiddler使用技巧进阶,如何抓包修改数据?——AutoResponder重定向
  4. (C++)1046 划拳
  5. Web前端培训面试攻略
  6. Shippable和Packet合作提供原生ARM CI/CD
  7. Sass函数:Sass Maps的函数-map-has-key($map,$key)
  8. 路由策略与策略路由的区别。
  9. OTS parsing error: invalid version tag woff和ttf文件被Filter拦截
  10. 新型智能电视攻击,9成国外设备或受影响