抽象工厂与工厂模式例子
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
抽象工厂与工厂模式例子相关推荐
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军.吕震宇 老师的文章更是堪称经典.他们的文笔如行云流水,例子活泼生动,讲解深入浅出.好在他们都是用C ...
- getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...
文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...
- C++设计模式 | Factory工厂模式(简单工厂、工厂方法、抽象工厂)
目录 简单工厂 工厂方法 抽象工厂 学习工厂模式需要有C++虚函数 纯虚函数等相关继承与多态知识 简单工厂 在简单工厂模式中,可以根据参数的不同返回不同的实例..简单工厂模式专门定义一个类来负责创建其 ...
- 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...
- JavaScript设计模式--简单工厂模式例子---XHR工厂
JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...
- 设计模式学习笔记——抽象工厂(Abstract Factory)模式
设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...
- 工厂模式(简单工厂,工厂方法,抽象工厂)
工厂顾名思义就是创建产品,工厂分为三种:简单工厂,工厂方法,抽象工厂.该模式用于封装和管理对象的创建,是一种创建型模式. 1)简单工厂 该模式通过向工厂传递类型来指定要创建的对象 提供一个方法,根据类 ...
- Java工厂模式(简单工厂、工厂方法、抽象工厂)详解
工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式.在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象. 1.工厂模式的理解 1.1.工厂模式的分类 工厂模 ...
- 【设计模式】Unity3D 简单工厂、工厂(方法)、抽象工厂模式
创建型模式-工厂三兄弟 提示:个人学习总结,如有错误,敬请指正 文章目录 创建型模式---工厂三兄弟 一.简单工厂模式 1.简单工厂模式是什么? 2.UML图 3.实现方式 二.工厂(方法)模式 1. ...
- 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...
最新文章
- 模板 - 有向图的连通性
- 成功解决mxnet.base.MXNetError: C:\Jenkins\workspace\mxnet-tag\mxnet\3rdparty\dmlc-core\src\io\local_file
- JZOJ 5640. 【NOI2018模拟4.9】劈配
- python权限管理系统_PMS:支持多应用的统一权限管理系统,用flask+vue实现
- python主线程有两个子线程、创建两个主函数_Python多任务之线程
- 获取Android版本信息和电话信息
- python mkdir -p_Python中的mkdir -p功能[复制]
- C 数据类型 常量 变量
- ATITIT提升效率 保持简单性 优化 简化 目录 1.1. 概念简单	1 1.2. 语言简单性 弱类型 动态变量 动态实体	1 1.3. 数据结构简单 arr 代替了array map s
- 计算机网络安全知识讲座新闻稿,我院开展网络安全与信息化建设讲座
- Jmeter之JSON Extractor
- iOS 设备的屏幕尺寸、分辨率及其屏幕边长比例详细情况
- Python 玫瑰花绘制
- Delphi变成小技巧——直接将excel当做表来显示
- 初学者完成HBuilder X网站制作
- Ubuntu开机一直滚屏 关键词:pcieport.......
- 谷歌账号被停用应该用什么方法进行找回(2022最新)
- Anaconda3 偏好设置
- Android P版本应用兼容性适配技术指导
- 6.7.1 机器人系统仿真/URDF、Gazebo与Rviz综合运用/机器人运动控制以及里程计信息显示
热门文章
- 在7分钟内深刻理解咖喱
- 调试代码遗留_陷入遗留代码地狱吗? 这里有一些想法可以帮助您处理情况
- fiddler使用技巧进阶,如何抓包修改数据?——AutoResponder重定向
- (C++)1046 划拳
- Web前端培训面试攻略
- Shippable和Packet合作提供原生ARM CI/CD
- Sass函数:Sass Maps的函数-map-has-key($map,$key)
- 路由策略与策略路由的区别。
- OTS parsing error: invalid version tag woff和ttf文件被Filter拦截
- 新型智能电视攻击,9成国外设备或受影响