设计模式——抽象工厂模式及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. GifShot - 创建动态 GIF 的 JavaScript 库

    GifShot 是一个可以创建流媒体,视频或图像的 GIF 动画的 JavaScript 库.该库的客户端特性使其非常便携,易于集成到几乎任何网站.利用最先进的浏览器 API ,包括 WebRTC , ...

  2. 【干货分享】32本优秀的 JavaScript 免费电子书

    JSbooks 收集了32本优秀的 JavaScript 免费电子书,分为初级.中级.高级三个类比,大家可以根据自身的情况需要下载.实实在在的干货!记得收藏和分享啊:) 您可能感兴趣的相关文章 Ver ...

  3. [deviceone开发]-模仿Zaker的示例

    一.简介 这个示例模仿zaker这个App,主要的界面基本都完成,用到了各种deviceone提供的ui组件,比如GridView,ListView,ScrollView,ViewShower等等.初 ...

  4. [deviceone开发]-一个很炫的手势动画示例

    一.简介 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手 ...

  5. Java你可能不知道的事(3)HashMap

    概述 HashMap对于做Java的小伙伴来说太熟悉了.估计你们每天都在使用它.它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着 ...

  6. iOS 开发之路(登陆页键盘遮挡输入框问题)一

    在学习开发登陆页的时候,遇到的问题分享如下: 首先是swift 3.0 中,NotificationCenter 设置 selector 如下: @IBOutlet weak var bottomCo ...

  7. 有效解决 iOS The document “(null)” requires Xcode 8.0 or later.

    下载了一个 xocde8beta版本   运行之后   结果 在xcode7.3上再运行 就报这句错误   以下链接 是非常有效的解决办法 不信你试试 [链接]Thisversiondoesnotsu ...

  8. iOS 杂笔-22(万年一遇~一张图片对代理的理解)

    iOS 杂笔-22(万年一遇~一张图片对代理的理解) 建议:本博客需要对代理有一定了解方可阅读(反正我也管不到) 图片 在图片之外设置协议(没有这东西这篇博客也就是夭折了) 下面我对图片中出现的形形色 ...

  9. UIScrollView之轮转图片

    在iOS开发中,经常会在APP首页看到多张图片进行轮换.刚开始做的时候,感觉很麻烦,不是很好做,查阅资料后,我总结了一下,自己封装了一个简单的轮转图片库: UIScrollView无限滑动 ,只需要三 ...

  10. Win8&Win2012R2如何支持DOTA2输入法

    微软自带的拼音和五笔就不用看了,没研究过,下面的方法应该不支持. 其实方法很简单运行下ctfmon.exe就可以了,这个原来旧输入模式的基础,测试可以支持QQ五笔. PS:使用拼音输入法的用户可以直接 ...