设计模式——抽象工厂模式及java实现

设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能。

设计模式有很多,而且也随着时间在不断增多,其中最著名的是四人组写的23种设计模式,并分为三大类:创建型模式,结构型模式,行为型模式。

抽象工厂模式属于创建型模式里面的五种之一,其中的工厂模式由于违背开闭原则(也就是对扩展开发,对修改关闭),所以抽象工厂模式可以有效解决

这里先给出java的抽象工厂模式的示例代码:

//抽象的人类,为所有的人造人提供一个相同的人造人属性
public abstract class Man {
public abstract void eat();
} public class AsiaMan extends Man {
@Override
public void eat() {
System.out.println("亚洲人用筷子吃");
}
} public class AmericanSuperMan extends Man {
@Override
public void eat() {
System.out.println("美国人用刀叉吃");
}
}
//抽象工厂,为所有的不同的工厂提供一个制作人造人的相同方法
public abstract class Factory {
public abstract Man product();
} public class AsiaManFactory extends Factory {
@Override
public Man product() {
Man anAisaMan = new AsiaMan();
return anAisaMan;
}
} public class AmericanFactory extends Factory {
@Override
public Man product() {
AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();
return anAmericanSuperMan;
}
}
public static void main(String[] args) { AsiaManFactory asiaManFactory = new AsiaManFactory();
AmericanFactory americanFactory = new AmericanFactory(); Man anAmericanSuperMan = americanFactory.product();
Man anAsia = asiaManFactory.product(); anAsia.eat();
anAmericanSuperMan.eat(); }

运行结果:

亚洲人用筷子吃

美国人用刀叉吃

假设2048年,人类科技创造了人造人,所有的人造人可以在工厂里面生产,

一个人造人父类为所有不同的人造人提供一个相同的属性:吃,亚洲人造人用筷子吃,美洲人造人用刀叉吃。抽象工厂可以为不同的工厂提供一个统一的生成流程,亚洲人造人工厂生产亚洲人造人,美洲人造人工厂生产美洲人造人

这里就有一个问题,为什么要用工厂模式,为什么不直接用 ClassA a = new ClassA();呢?看起来是等价的,但是如果生产的人造人不是在工厂里生产的,而是分布在世界各地的小作坊生产的,那么当所有亚洲人造人生产方式变了,那么就要更改世界各地的小作坊的生产方法,这样改下来就太麻烦了,用了工厂模式,只需要修改工厂里面的生产方法,那么得到的人造人就是统一的了。

其实工厂模式就是对示例化过程的一个封装,为日后维护代码提供一个便捷的方法

设计模式——抽象工厂模式及java实现的更多相关文章

  1. 抽象工厂模式(Java与Kotlin版)

    前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...

  2. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  4. Java设计模式-抽象工厂模式(Abstract Factory )

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  5. 2.java设计模式-抽象工厂模式

    抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一 ...

  6. Java设计模式-抽象工厂模式(Abstarct Factory)

    抽象工厂模式 举个生活中常见的例子,组装电脑,在组装电脑时,通常需要选择一系列的配件,比如CPU,硬盘,内存,主板,电源,机箱等,为了讨论使用简单,值考虑选择CPU和主板的问题. 事实上,在选择CPU ...

  7. Java设计模式——抽象工厂模式

    抽象工厂模式也是创建模式,可以把它理解成创建工厂的工厂,这种模式也是我们经常使用的.在抽象工厂中的接口是用来创建工厂的,每个生成的工厂又都可以按照工厂模式创建其他对象. 举例说明: 创建Shape接口 ...

  8. 24种设计模式--抽象工厂模式【Abstract Factory Pattern】

    女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...

  9. 设计模式 | 抽象工厂模式(abstract factory)

    定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...

随机推荐

  1. 使用 WordPress 插件模板开发高质量插件

    WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件.样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可. 官方网站    ...

  2. 使用异步存储提升 Web 应用程序的离线体验

    localForage 是一个 JavaScript 库,通过使用简单的.类似 localStorage 风格的 API 实现异步存储,帮助你提升 Web 应用程序的离线经验(通过 IndexedDB ...

  3. AE,按照属性值关系选择要素

    if(axMapControl2.LayerCount<=0) { MessageBox.Show("请加载图层后使用该功能","系统提示",Messag ...

  4. myeclipse 2015 CI 16发布【附下载】

    2015升级版再次来袭! 更新日志: Slack Integration 新版本集成了Slack,你只需要注册一个Slack帐号然后就可以发送和接收代码片段.你甚至不需要登录Slack就可以直接在Ec ...

  5. ios7 tableview被navigationbar挡住

    用ego下拉刷新的时候,每次在ios7时,tableview都会上移...导致被navagationbar挡住.ios6是正常的,于是在init的时候添加如下代码... NSComparisonRes ...

  6. swift 中手势的使用

    swift 中手势的使用 /**点击手势*/ func tapGestureDemo() { //建立手势识别器 let gesture = UITapGestureRecognizer(target ...

  7. Android 手机卫士--事件传递&响应规则

    问题的提出: 本文地址:http://www.cnblogs.com/wuyudong/p/5911187.html ,转载请注明源地址. 前面的文章实现了点击SettingItemView条目的时候 ...

  8. 【iOS】彩色TabBar切换动画实现

    无意间看到一个彩色TabBar切换的设计图,感觉很不错,有空就把他实现了. 环境信息 Mac OS X 10.10.4 Xcode 6.4 iOS 8.4 效果图: 效果图 源码下载地址: https ...

  9. ReactiveCocoa框架下的MVVM模式解读

    记录一些MVVM文章中关于ReactiveCocoa的代码: 实例一:带有分页的文章列表,根据文章类别过滤出文章的列表,可以进入文章详细页面 1:YFBlogListViewModel 首先了解关于列 ...

  10. Android的生命周期学习

    掌握Android的生命周期对于如何一个刚刚接触Android初学者来说是至关重要的,在然后的开发中会给我留有更多的时刻余地,当自己正在认识Android中整个声明周期后,会编写出更加的流畅的程序 应 ...