工厂三姐妹

工厂三姐妹工厂三姐妹

大家好,又见面了,我是你们的朋友全栈君。

    设计模式中第一个接触的模式就是简单工厂模式,简单工厂也并不简单,相对我们之前面向过程的编程而言,简单工厂模式已经是从面相过程向面向对象的一个飞跃。但是简单工厂也有她的不足,便是她并不符合开放—封闭的原则。紧接着就有了工厂方法模式,工厂方法是对简单工厂的继承与改进,将简单工厂类改进优化成抽象的工厂类与具体的工厂类。抽象工厂模式对工厂方法模式作了更进一步的优化。

1.简单工厂模式

    简单工厂解决的就是如何实例化对象的问题,对于一些很容易变化的地方,就可以考虑用一个单独的类来做这个创造实力的过程。

    优点:工厂类中包含了必要的逻辑判断,根据客户端的选择动态的实例化相关的类,对于客户端来说去除了与具体产品的依赖。

    抽象的语言总是难以理解,下面就通过具体的实例来更深刻的领会简单工厂模式的好处。

    用简单工厂模式实现计算器的功能时,各个类的示例图如下:

工厂三姐妹

工厂类的具体实现代码:

public class OperationFactory
{
	public static Operation createOperate(string operate)
	{
		Operation oper=null;
		switch(operate)
		{
			case"+":
				oper = new OperationAdd();
				break;
			case"-":
				oper = new OperationSub();
				break;
			case"*":
				oper = new OperationMul();
				break;
			case"/":
				oper = new OperationDiv();
				break;
		}
		return oper;
	}
}

    通过图示和代码可以看出,如果想要增加或删除某一个运算方法,就必须改变工厂类。

    然而正是因为她的优点,也暴露了不足的地方:把逻辑判断放在工厂类中,如果想要再增加、删除、修改逻辑判断,就不得不修改工厂类,这就违背了开放—扩展原则。

2.工厂方法模式

    定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。

通过工厂方法来实现上面计算器的例子:

工厂三姐妹

    不难看出,工厂类下面增加了加法、减法等具体的工厂,这样增加新的运算时只需要扩展工厂类就可以。这样也将实例化的过程延迟到了子类。

工厂模式结构图:

工厂三姐妹

3.抽象工厂模式

    定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

结构图:

工厂三姐妹

优点:

1.易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化时出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。

2.它让具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105773.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 小程序自定义tabbar的两种方式

    小程序自定义tabbar的两种方式小程序自定义tabbar先做一下效果展示吧本案例是按照官网来做的app.js代码:“tabBar”:{“custom”:true,“color”:“#000000”,“selectedColor”:“#000000”,“backgroundColor”:“#000000”,“borderStyle”:“white”,“list”:[{“pagePath”:…

    2025年7月30日
    3
  • Qt面试题(二)

    Qt面试题(二)QT理论试题1以下关于QT的描述正确的是a.是一个不跨平台的C++图形用户界面b.由挪威TrollTech公司出品c.只支持Unix、Linuxd.QTAPI和开发工具对所支持的平台是不一致的2以下关于QT的描述不正确的是a.QT支持2D图形渲染b.QT支持3D图形渲染c.QT支持OpenGL d.QT不支持XML…

    2022年6月25日
    39
  • 《windows程序设计》_windows窗口程序设计

    《windows程序设计》_windows窗口程序设计TEXTMETRICTEXTMETRIC是在WINGDI.H中定义的型态的结构。结构体各成员介绍TEXTMETRIC是在WINGDI.H中定义的型态的结构。TEXTMETRIC结构有20个栏位:typedef struct tagTEXTMETRIC { // tmLONG tmHeight; //字符高度TEXTMETRIC结构字段的图示LONG tmAscent; //字符上部高…

    2022年8月18日
    11
  • scrapy安装教程_玻璃幕墙安装介绍

    scrapy安装教程_玻璃幕墙安装介绍在写之前我们先来了解一下什么是Scrapy?Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便Scrapy使用了Twisted[‘twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不…

    2022年9月18日
    4
  • 联想笔记本电脑键盘灯怎么开启_联想笔记本电脑的键盘背光怎么打开[通俗易懂]

    联想笔记本电脑键盘灯怎么开启_联想笔记本电脑的键盘背光怎么打开[通俗易懂]展开全部1、联想笔记本部分型号具备键盘背光功能,方法通过“FN+空格”打开,支持62616964757a686964616fe78988e69d8331333431336664此功能的机型,键盘上有相应标示。部分早期的Thinkpad笔记本电脑若带有键盘灯,需要通过“Fn+PageUp”组合键开启。发现电脑键盘的“Space(空格键)”按键上有下图所示的标识符号电脑一般带有键盘背光,使用”Fn+…

    2022年9月20日
    2
  • Java基础(冒泡排序)[通俗易懂]

    Java基础(冒泡排序)[通俗易懂]一.冒泡排序简介比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。动…

    2022年6月22日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号