策略模式的优缺点(桥接模式和策略模式的区别)
本文目录
桥接模式和策略模式的区别
桥接(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中,状态模式和策略模式的区别希望可以帮到你祝你学习愉快
更多文章:
this is us第五季剧情(美国恐怖故事第五季剧情 讲的是什么故事)
2024年8月9日 14:35
c语言数组下标从0开始(为什么在C语言定义数组时下标必须从零开始呢)
2024年7月23日 13:51
win10无法启动mysql服务(win10 mysql5.0服务无法启动)
2024年7月24日 06:33
selective tool怎么卸载(如何卸载虚拟机中VMware tools)
2024年7月16日 11:37
我认为自动挡能用左脚刹车,有人觉得不能曾颖卓、赛雷话车等大V认为左脚刹车不影响安全,为何有人反对
2024年5月8日 16:29
jndi连接数据库(使用JNDI连接数据库连接池问题,救命啊!!!!)
2024年8月25日 16:10
excel表格制作题目及答案(求一份excel操作题和答案)
2024年7月18日 12:43
object标签(Html的<object>标签无法显示*.swf文件,为什么没显示内容)
2024年5月23日 07:43
冒泡排序c语言代码从小到大(用冒泡排序法对10个字符串排序,并按从小到大的顺序输出.需要用c语言来编程的)
2024年6月23日 05:43
备份集中的数据库备份与现有的数据库不同(备份集中的数据库备份与现有的数据库不同怎么解决)
2024年7月25日 04:55
嵌入式开发培训 杭州(杭州嵌入式开发工资高吗达内嵌入式开发课程怎么安排的)
2024年5月13日 02:30