策略模式的优缺点(桥接模式和策略模式的区别)

2024-05-09 08:31:48 75

策略模式的优缺点(桥接模式和策略模式的区别)

本文目录

桥接模式和策略模式的区别

桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。以下是它们的UML结构图。

在桥接模式中,Abstraction通过聚合的方式引用Implementor。

在策略模式中,Context也使用聚合的方式引用Startegy抽象接口。

从他们的结构图可知,在这两种模式中,都存在一个对象使用聚合的方式引用另一个对象的抽象接口的情况,而且该抽象接口的实现可以有多种并且可以替换。可以说两者在表象上都是调用者与被调用者之间的解耦,以及抽象接口与实现的分离。

那么两者的区别体现在什么地方呢?

1. 首先,在形式上,两者还是有一定区别的,对比两幅结构图,我们可以发现,在桥接模式中不仅Implementor具有变化(ConcreateImplementior),而且Abstraction也可以发生变化(RefinedAbstraction),而且两者的变化是完全独立的,RefinedAbstraction与ConcreateImplementior之间松散耦合,它们仅仅通过Abstraction与Implementor之间的关系联系起来。而在策略模式中,并不考虑Context的变化,只有算法的可替代性。

2. 其次在语意上,桥接模式强调Implementor接口仅提供基本操作,而Abstraction则基于这些基本操作定义更高层次的操作。而策略模式强调Strategy抽象接口的提供的是一种算法,一般是无状态、无数据的,而Context则简单调用这些算法完成其操作。

3. 桥接模式中不仅定义Implementor的接口而且定义Abstraction的接口,Abstraction的接口不仅仅是为了与Implementor通信而存在的,这也反映了结构型模式的特点:通过继承、聚合的方式组合类和对象以形成更大的结构。在策略模式中,Startegy和Context的接口都是两者之间的协作接口,并不涉及到其它的功能接口,所以它是行为模式的一种。行为模式的主要特点就是处理的是对象之间的通信方式,往往是通过引入中介者对象将通信双方解耦,在这里实际上就是将Context与实际的算法提供者解耦。

所以相对策略模式,桥接模式要表达的内容要更多,结构也更加复杂。桥接模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。从结构图中可以看到,策略的结构是包容在桥接结构中的,桥接中必然存在着策略模式,Abstraction与Implementor之间就可以认为是策略模式,但是桥接模式一般Implementor将提供一系列的成体系的操作,而且Implementor是具有状态和数据的静态结构。而且桥接模式Abstraction也可以独立变化。

企业多元化战略优缺点及适用范围是什么

  具体的我也不太清楚,因为我上次也不过是帮你从别的地方找来的,下边的东西你看看吧,觉得没有用的话,就看其他人的高见吧:  一。与非相关多元化相比,相关多元化战略有以下优势:  1、可以将专有技能,生产能力或者技术由一种经营转到另一种经营中去;  2、能将不同的经营业务的相关活动合并在一起,降低成本;  3、可以在新的经营业务中借用公司品牌的信誉;  4、以能够创建有价值的竞争能力的协作方式实施相关的价值链活动。  二。多元化经营面临5个方面的风险。  1.来自原有经营产业的风险。企业资源总是有限的,多元化经营的技人往往意味着原有经营的产业要受到削弱。这种削弱不仅是资金方面的,管理层注意力的分散也是一个方面,它所带来的后果往往是严重的。然而,原有产业却是多元化经营的基础,新产业在初期需要原产业的支持,若原产业受到迅速的削弱,公司的多元化经营将面临危机。  2.市场整体风险。支持多元化经营的一个流行的说法是,多元化经营通过“把鸡蛋放在不同的篮子里”去化解经营风险——正所谓“东方不亮西方亮”。然而,市场经济中的广泛相互关联性决定了多元化经营的各产业仍面临共同的风险。也就是说,“鸡蛋”仍放在一个篮子里,只不过是篮子稍微大了一些罢了。在宏观力量的冲击之下,企业多元化经营的资源分散反而加大了风险。一家产品出口公司可通过多元化经营扩大业务规模,然而在面临金融危机冲击的条件下,这家公司却难以在各个经营业务中与最强硬的对手展开竞争,最终落得被各个击破的下场。  3.行业进入风险。行业进入不是一个简单的”买入”过程。企业在进入新产业之后还必须不断地注入后续资源,去学习这个行业并培养自己的员工队伍,塑造企业品牌。另一方面,行业的竞争态势是不断变化的,竞争者的策略也是一个未知数,企业必须相应地不断调整自己经营策略。所以,进入某一行业是一个长期、动态的过程,很难用通常的投资额等静态指标来衡量行业的进入风险。  4.行业退出风险。企业在多元化投资前往往很少考虑到退出的问题。然而,如果企业深陷一个错误的投资项目却无法做到全身而退,那么很可能导致企业全军覆没。一个设计良好的经营退出渠道能有效地降低多元化经营风险。摩托罗拉当初看好卫星通信业务而发起了”铱星”计划,当最后”铱星”负债数十亿而陨落时,摩托罗拉却因一开始就将”铱星”项目注册为独立的实体而只承受了有限的责任和损失。  5.内部经营整台风险。新投资的产业会通过财务流、物流、决策流、人事流给企业以及企业的既有产业经营带来全面的影响。不同的行业有不同的业务流程和不同的市场模式,因而对企业的管理机制有不同的要求。企业作为一个整体,必须把不同行业对其管理机制的要求以某种形式融合在一起。多元化经营多重目标和企业有限资源之间的冲突,使这种管理机制上的融合更为困难,使企业多元化经营的战略目标最终趋于内部冲突的妥协。百事可乐的快餐十可乐多元化经营就面临着两个产业在资金、人力资源等方面的冲突,最终只好成立两个公司独立经营。当企业通过兼并他人进行多元化经营的时候还会面临一种风险,那就是不同企业文化是否能够成功融合的风险。企业文化的冲突对企业经营往往是致命的。

策略模式为了解决什么问题而产生何时使用策略模式

应用场景:  1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。(例如FlyBehavior和QuackBehavior)  2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充)  3、 对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立。希望对你有点帮助...

状态模式和策略模式的区别与联系

你好Java开发者,要想恰当的使用状态模式和策略模式,必须清楚的理解它们之间的区别。虽然状态模式和策略模式拥有相似的结构,虽然它们都基于SOLID设计原则中的O(开闭原则),但是,它们的意图是完全不同的。策略模式通过封装一组相关算法,为Client提供运行时的灵活性。Client可以在运行时,选择任一算法,而不改变使用算法的Context。一些流行的策略模式的例子是写那些使用算法的代码,例如加密算法、压缩算法、排序算法。另一方面,状态模式允许对象,在不同的状态拥有不同的行为。因为现实世界中的对象通常都是有状态的,所以它们在不同状态,行为也不一样。例如,VM(自动售货机)只在hasCoin状态才给你吐商品;你不投币,它是不会吐的。现在你可以清楚的看出它们的不同之处了:它们的意图是不同的。状态模式帮助对象管理状态,而策略模式允许Client选择不同的行为。另一个不那么容易能看出来的区别是:是谁促使了行为的改变。策略模式中,是Client提供了不同的策略给Context;状态模式中,状态转移由Context或State自己管理。另外,如果你在State中管理状态转移,那么它必须持有Context的引用。例如,在VM的例子中,State对象需要调用VM的setState()方法去改变它的状态。另一方面,Strategy从不持有Context的引用,是Client把所选择的Strategy传递给Context。由于状态模式和策略模式的区别,是流行的Java设计原则类面试题之一,我们将会在本文探讨在Java中,状态模式和策略模式的异同,这可以加深你对它们的理解。相似之处如果你看看状态模式和策略模式的UML图,就会发现它们的结构非常相似。使用State对象改变自己行为的对象被称为Context对象;相似的,使用Strategy对象改变自己行为的对象叫Context对象。记住,Client和Context打交道。在状态模式中,Context把方法调用委托给当前的状态对象,而在策略模式中,Context使用的Strategy对象,是被当做参数传递过来的,或在Context对象被创建时就被提供的。这是专为经典的VM问题而设计的状态模式UML类图。你可以看出,VM的状态是个接口,它有表示不同状态的具体实现。每一个状态都持有Context的引用,用它来管理由Context触发的行为导致的状态转移。这是专为实现排序功能而设计的策略模式UML类图。因为存在很多排序算法,该模式让Client在排序时选择适当的算法。事实上,Java的集合框架就使用这个模式,实现了用来排序的Collections.sort()方法。不同的是,它不允许Client选择排序算法,而是让它传递Comparator或Comparable接口的实例来指定比较策略。让我们来看看它们之间更多的相似之处:添加新的状态或策略都很容易,而且不需要修改使用它们的Context对象。它们都让你的代码符合OCP原则。在状态模式和策略模式中,Context对象对修改是关闭的,添加新的状态或策略,都不需要修改Context。正如状态模式中的Context会有初始状态一样,策略模式同样有默认策略。状态模式以不同的状态封装不同的行为,而策略模式以不同的策略封装不同的行为。它们都依赖子类去实现相关行为。不同之处现在我们知道,状态模式和策略模式的结构是相似的,但它们的意图不同。让我们重温一下它们的主要不同之处:策略模式封装了一组相关算法,它允许Client在运行时使用可互换的行为;状态模式帮助一个类在不同的状态显示不同的行为。状态模式封装了对象的状态,而策略模式封装算法或策略。因为状态是跟对象密切相关的,它不能被重用;而通过从Context中分离出策略或算法,我们可以重用它们。在状态模式中,每个状态通过持有Context的引用,来实现状态转移;但是每个策略都不持有Context的引用,它们只是被Context使用。策略实现可以作为参数传递给使用它的对象,例如Collections.sort(),它的参数包含一个Comparator策略。另一方面,状态是Context对象自己的一部分,随着时间的推移,Context对象从一个状态转移到另一个状态。虽然它们都符合OCP原则,策略模式也符合SRP原则(单一职责原则),因为每个策略都封装自己的算法,且不依赖其他策略。一个策略的改变,并不会导致其他策略的变化。另一个理论上的不同:策略模式定义了对象“怎么做”的部分。例如,排序对象怎么对数据排序。状态模式定义了对象“是什么”和“什么时候做”的部分。例如,对象处于什么状态,什么时候处在某个特定的状态。状态模式中很好的定义了状态转移的次序;而策略模式并无此需要:Client可以自由的选择任何策略。一些常见的策略模式的例子是封装算法,例如排序算法,加密算法或者压缩算法。如果你看到你的代码需要使用不同类型的相关算法,那么考虑使用策略模式吧。而识别何时使用状态模式是很简单的:如果你需要管理状态和状态转移,但不想使用大量嵌套的条件语句,那么就是它了。最后但最重要的一个不同之处是,策略的改变由Client完成;而状态的改变,由Context或状态自己。本文链接地址: Java中,状态模式和策略模式的区别希望可以帮到你祝你学习愉快

策略模式的优缺点(桥接模式和策略模式的区别)

本文编辑:admin

更多文章:


this is us第五季剧情(美国恐怖故事第五季剧情 讲的是什么故事)

this is us第五季剧情(美国恐怖故事第五季剧情 讲的是什么故事)

这篇文章给大家聊聊关于this is us第五季剧情,以及美国恐怖故事第五季剧情 讲的是什么故事对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录美国恐怖故事第五季剧情 讲的是什么故事行尸走肉第五季14剧情介绍:弩哥食人魔大战行

2024年8月9日 14:35

c语言头文件怎么写(C语言头文件里面应该写什么东西)

c语言头文件怎么写(C语言头文件里面应该写什么东西)

本文目录C语言头文件里面应该写什么东西在c语言中,如何自定义头文件c语言头文件怎么写谁能教教我c语言的头文件怎么写啊,以及怎么用用的C-free写,在线等,成功追奖赏如何制作C语言头文件c语言中如何制作头文件,如何调用其他自己写地函数C语言

2024年6月28日 16:18

请教金融高手Loans and Advances Issued,Loans and Advances Outstanding,Loans如何翻译及其区别?loan note是什么科目

请教金融高手Loans and Advances Issued,Loans and Advances Outstanding,Loans如何翻译及其区别?loan note是什么科目

大家好,loans相信很多的网友都不是很明白,包括请教金融高手Loans and Advances Issued,Loans and Advances Outstanding,Loans如何翻译及其区别也是一样,不过没有关系,接下来就来为大

2024年8月29日 18:35

c语言数组下标从0开始(为什么在C语言定义数组时下标必须从零开始呢)

c语言数组下标从0开始(为什么在C语言定义数组时下标必须从零开始呢)

各位老铁们好,相信很多人对c语言数组下标从0开始都不是特别的了解,因此呢,今天就来为大家分享下关于c语言数组下标从0开始以及为什么在C语言定义数组时下标必须从零开始呢的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目

2024年7月23日 13:51

vipcode和编程猫哪个好呀(在线少儿编程机构排名)

vipcode和编程猫哪个好呀(在线少儿编程机构排名)

本文目录在线少儿编程机构排名少儿编程十大品牌机器人编程和编程猫哪个好少儿编程十大机构哪家在线少儿编程机构比较好编程猫和猿编程哪个好一点少儿编程在线教育哪个品牌好少儿编程培训班哪个好在线少儿编程机构排名少儿编程国内排行榜:编程猫、童程童美、小

2024年7月17日 09:13

win10无法启动mysql服务(win10 mysql5.0服务无法启动)

win10无法启动mysql服务(win10 mysql5.0服务无法启动)

本文目录win10 mysql5.0服务无法启动求教Win10下MYSQL服务不能启动的问题win10 mysql5.0服务无法启动你好,WP酷七网团队为你解答:用别的运行环境就可以了,一般运行环境自带的有数据库功能满意请采纳,不懂请追问。

2024年7月24日 06:33

selective tool怎么卸载(如何卸载虚拟机中VMware tools)

selective tool怎么卸载(如何卸载虚拟机中VMware tools)

大家好,今天小编来为大家解答以下的问题,关于selective tool怎么卸载,如何卸载虚拟机中VMware tools这个很多人还不知道,现在让我们一起来看看吧!本文目录如何卸载虚拟机中VMware tools如何卸载 Selectio

2024年7月16日 11:37

我认为自动挡能用左脚刹车,有人觉得不能曾颖卓、赛雷话车等大V认为左脚刹车不影响安全,为何有人反对

我认为自动挡能用左脚刹车,有人觉得不能曾颖卓、赛雷话车等大V认为左脚刹车不影响安全,为何有人反对

本文目录我认为自动挡能用左脚刹车,有人觉得不能曾颖卓、赛雷话车等大V认为左脚刹车不影响安全,为何有人反对我认为自动挡能用左脚刹车,有人觉得不能曾颖卓、赛雷话车等大V认为左脚刹车不影响安全,为何有人反对说这么多废话,你们根本不懂开车!!右脚在

2024年5月8日 16:29

杭州c语言培训班(c++培训班学费一般多少)

杭州c语言培训班(c++培训班学费一般多少)

本篇文章给大家谈谈杭州c语言培训班,以及c++培训班学费一般多少对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录c++培训班学费一般多少杭州

2024年7月16日 08:10

jndi连接数据库(使用JNDI连接数据库连接池问题,救命啊!!!!)

jndi连接数据库(使用JNDI连接数据库连接池问题,救命啊!!!!)

各位老铁们好,相信很多人对jndi连接数据库都不是特别的了解,因此呢,今天就来为大家分享下关于jndi连接数据库以及使用JNDI连接数据库连接池问题,救命啊!!!!的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录

2024年8月25日 16:10

excel表格制作题目及答案(求一份excel操作题和答案)

excel表格制作题目及答案(求一份excel操作题和答案)

本文目录求一份excel操作题和答案excel基础知识选择题「附答案」excel考试题库「附答案」求一份excel操作题和答案(1)按照每五年收入翻一番,利用等比填充表中数据。 (2)利用公式计算 80 年到 94 年间每个人的总收入。

2024年7月18日 12:43

object标签(Html的<object>标签无法显示*.swf文件,为什么没显示内容)

object标签(Html的<object>标签无法显示*.swf文件,为什么没显示内容)

本文目录Html的标签无法显示*.swf文件,为什么没显示内容关于标签属性等含义求解在HTML语言中object标签有什么作用Object标签无法被覆盖,层级最高问题document.write创建的object标签如何插入到DIV中去啊h

2024年5月23日 07:43

matlab安装包怎么删除(我在电脑上安装matlab7.0失败,要删除安装文件夹,又删不掉,怎么能把那个文件夹删了啊求助各位大侠)

matlab安装包怎么删除(我在电脑上安装matlab7.0失败,要删除安装文件夹,又删不掉,怎么能把那个文件夹删了啊求助各位大侠)

本文目录我在电脑上安装matlab7.0失败,要删除安装文件夹,又删不掉,怎么能把那个文件夹删了啊求助各位大侠怎么在电脑上吧mathlb删除干净如何删除MATLAB的所有文件包括注册文件什么的,想重装MATLAB电脑程序matlab无法删除

2024年7月5日 07:47

vscode源码分析(vs 跟vscode有什么不同)

vscode源码分析(vs 跟vscode有什么不同)

“vscode源码分析”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看vscode源码分析(vs 跟vscode有什么不同)!本文目录vs 跟vscode有什么不同vscode + gdb 远程调试 linux 内核源码(附

2024年7月13日 21:26

django安装步骤(如何 安装 django 版本)

django安装步骤(如何 安装 django 版本)

本文目录如何 安装 django 版本django怎么安装在centos中怎么安装django如何在linux系统下安装django如何安装 Django如何 安装 django 版本安装Python,点开python-3.3.4.msi然

2024年6月26日 01:55

冒泡排序c语言代码从小到大(用冒泡排序法对10个字符串排序,并按从小到大的顺序输出.需要用c语言来编程的)

冒泡排序c语言代码从小到大(用冒泡排序法对10个字符串排序,并按从小到大的顺序输出.需要用c语言来编程的)

本文目录用冒泡排序法对10个字符串排序,并按从小到大的顺序输出.需要用c语言来编程的用C语言编程:用“冒泡法”对输入的10个字符按由小到大的顺序排列C语言:编写函数用冒泡排序法对数组中的数据进行从小到大的排序.C语言 输入5个数字,然后把它

2024年6月23日 05:43

pawned(pawn的意思,造句)

pawned(pawn的意思,造句)

本文目录pawn的意思,造句pawn的意思,造句pawn : [当掉] . [人质] . [典当] . [抵押物] . 1. The painter had to pawn his watch to pay for a meal.这位

2024年7月24日 16:44

备份集中的数据库备份与现有的数据库不同(备份集中的数据库备份与现有的数据库不同怎么解决)

备份集中的数据库备份与现有的数据库不同(备份集中的数据库备份与现有的数据库不同怎么解决)

大家好,备份集中的数据库备份与现有的数据库不同相信很多的网友都不是很明白,包括备份集中的数据库备份与现有的数据库不同怎么解决也是一样,不过没有关系,接下来就来为大家分享关于备份集中的数据库备份与现有的数据库不同和备份集中的数据库备份与现有的

2024年7月25日 04:55

伦勃朗光是伦勃朗发明的吗(什么是伦勃朗光线)

伦勃朗光是伦勃朗发明的吗(什么是伦勃朗光线)

本文目录什么是伦勃朗光线伦之光讲的什么什么颜色什么是伦勃朗光线伦勃朗光线得名于世界著名的荷兰画家伦勃朗。自然界中它多指雨天或阴天乌云遮住阳光时,阳光从乌云中的缝细或边缘中以放射状照向地面,光线如光柱状,又有如神明或神使降临般的华丽光线;而绘

2024年6月11日 02:23

嵌入式开发培训 杭州(杭州嵌入式开发工资高吗达内嵌入式开发课程怎么安排的)

嵌入式开发培训 杭州(杭州嵌入式开发工资高吗达内嵌入式开发课程怎么安排的)

本文目录杭州嵌入式开发工资高吗达内嵌入式开发课程怎么安排的杭州嵌入式培训机构不要骗人的在杭州嵌入式学费多少啊杭州嵌入式培训哪里好杭州嵌入式工程师培训哪家好杭州嵌入式培训机构急求一家好的杭州嵌入式培训机构!嵌入式培训哪家好啊!杭州嵌入式开发工

2024年5月13日 02:30

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索