黑马程序员浅谈设计模式-策略模式
深入浅出设计模式之策略模式

分析
• 上面我们采用继承的来解决程序的开放性 和可扩充性;遇到了问题;为什么会这样
• 因为超类作为所有类的父类;拥有所有子类 的共性;但未来会出现什么子类;无从得知; 因此;无法确定哪些是共性方法和共性属性
ቤተ መጻሕፍቲ ባይዱ
继承
• 继承本是为了代码的复用;节省子类的代码 • 但由于未来的不确定性;无法预知子类的多
产生一个新的飞行类
• public class FlyRocketPowered implements FlyBehavior
• public void fly • System out printlnI am flying with
rocket ; •
动态改变行为
Duck model = new ModelDuck; model performFly; model setFlyBehaviornew FlyRocketPowered;
少 • 继承必须有父类和子类;确定父类的属性和
方法很关键
继承的问题
• 代码在多个子类出现不必要的重复 • 无法事先预知所有的子类的所有行为 • 改变父类;会同时改变子类
采用接口
• 接口在Java中是一个非常重要的概念 • Java不支持多继承;但一个类可以实现多个
接口 • 采用接口覆盖鸭子飞和叫的方法;每一个会
• 优秀的OO设计必须具备可复用;可扩充;可 维护的特性
• 模式可以让我们建造更好的质量的软件 • 模式也可以认为是历经考验的OO设计经验
本章要点
• 模式不是具体的代码;是解决问题的思想 • 模式允许软件改变;但改变对软件影响减小 • 系统中变化的部分进行封装 • 模式让高级开发者具有共同语言
– 需求改变 – 平台改变 – 数据改变
策略模式详解

策略模式详解
策略模式是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。
策略模式使得算法可以独立于使用它的客户端而变化。
策略模式适用于那些需要使用多种算法的问题。
由于每种算法都有其特殊的用途,因此客户端需要根据当前的情况选择最合适的算法。
在这种情况下,策略模式提供了一个灵活且可扩展的框架,使得算法的选择和使用变得简单且易于维护。
在策略模式中,有三个主要的参与者:
1. Strategy:策略接口定义了所有算法的公共接口,客户端通过这个接口来调用算法。
这样,客户端就不需要关心具体的算法实现,只需要根据需要选择相应的策略即可。
2. ConcreteStrategy:具体策略类实现了策略接口,并提供了具体的算法实现。
每个具体策略类都代表了一种特定的算法。
3. Context:上下文对象负责维护策略对象的实例,并根据需要切换不同的策略。
上下文对象通常会根据客户端的请求选择合适的策略对象,并将这个策略对象传递给客户端。
策略模式的优点在于它能够提供一种灵活且可扩展的解决方案,使得算法的选择和使用变得简单且易于维护。
由于策略对象是独立的,因此可以很容易地添加新的策略,而不需要修改现有的代码。
此外,策略模式还可以提供一种替换算法的方式,使得系统能够根据需要进
行动态的调整。
总之,策略模式是一种非常有用的行为型设计模式,它能够提供一种灵活且可扩展的解决方案来解决那些需要使用多种算法的问题。
设计模式之策略模式浅谈以及简单例子

设计模式之策略模式浅谈以及简单例⼦设计模式之策略模式策略模式定义了算法类,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独⽴于使⽤算法的客户。
策略模式是对算法的包装,是把使⽤的责任和算法本⾝分割开来,委派给不同的对象管理。
策略模式通常把⼀个系列的算法包装到⼀系列的策略类⾥⾯,作为⼀个抽象策略类的⼦类。
策略模式涉及到三个⾓⾊:环境(Context)⾓⾊:持有⼀个Strategy的引⽤,也称策略上下⽂。
抽象策略(Strategy)⾓⾊:这是⼀个抽象⾓⾊,通常使⽤抽象类或者接⼝来实现。
此⾓⾊给出所有的具体策略类所需要的接⼝。
具体策略(ConcreteStrategy)⾓⾊:此⾓⾊包装了所有的算法和⾏为。
Eg:商场搞促销,促销⽅式有打折、满100减50等。
在本例中,抽象策略⾓⾊⽤⼀个结果实现,接⼝中有⼀个计算价格的⽅法。
接⼝实现如下:1namespace Strategy_Pattern23 {45///<summary>67///策略接⼝89///</summary>1011interface IPromotion1213 {1415///<summary>1617///根据原价和策略计算新价格1819///</summary>2021///<param name="originalPrice">原价</param>2223///<returns></returns>2425double GetPrice(double originalPrice);2627 }2829 }具体策略⾓⾊有两个,分别表⽰打折类和满100减50,都实现策略接⼝。
打折类实现如下:1 using System;2345 namespace Strategy_Pattern67 {89 /// <summary>1011 /// 打折策略类1213 /// </summary>1415 class Discount : IPromotion1617 {181920212223 #region Public Methods2425 public double GetPrice(double originalPrice) 2627 {2829 Console.WriteLine("打⼋折");3031 return originalPrice * 0.8;3233 }3435 #endregion36373839 }4041 }满100减50类实现如下:/// <summary>/// 返现策略类:满100返50/// </summary>class MoneyBack : IPromotion{#region Public Methodspublic double GetPrice(double originalPrice){Console.WriteLine("满100返50");return originalPrice - (int)originalPrice / 100 - 50; }#endregion}环境(Context)⾓⾊类如下:/// <summary>/// 策略上下⽂类/// </summary>class PromotionContext{#region Fieldsprivate IPromotion m_promotion = null;#endregion#region Constructorspublic PromotionContext(IPromotion iPromotion){this.m_promotion = iPromotion;}#endregion#region Public Methods/// <summary>/// 默认策略⽅法/// </summary>/// <param name="originalPrice"></param>/// <returns></returns>public double GetPrice(double originalPrice){if (this.m_promotion == null){this.m_promotion = new Discount();}return this.m_promotion.GetPrice(originalPrice);}/// <summary>/// 更改策略的⽅法/// </summary>/// <param name="iPromotion"></param>public void ChangePromotion(IPromotion iPromotion){this.m_promotion = iPromotion;}#endregion}然后再主类中调⽤相应的策略,主类实现如下:class Program{static void Main(string[] args){//默认策略:打⼋折的策略PromotionContext promotionContext=new PromotionContext(null);Console.WriteLine(promotionContext.GetPrice(300));//更改策略:满100减50的策略promotionContext.ChangePromotion(new MoneyBack()); Console.WriteLine(promotionContext.GetPrice(100));Console.ReadLine();}}。
java设计模式--策略模式详解

java设计模式--策略模式详解⽬录策略模式Demo代码:总结策略模式策略模式(Strategy Pattern)属于⾏为型模式,指对象有某个⾏为,但是在不同的场景中,该⾏为有不同的实现算法。
⽤算法族分别封装起来,实现同⼀个接⼝,让他们之间可以互相替换,让算法的变化独⽴于使⽤算法的客户。
主要解决:在有多种算法相似的情况下,使⽤ if…else 所带来的复杂和难以维护。
如何解决:将这些算法封装成⼀个⼀个的类,任意地替换。
何时使⽤:⼀个系统有许多许多类,⽽区分它们的只是他们直接的⾏为。
使⽤场景:如果在⼀个系统⾥⾯有许多类,它们之间的区别仅在于它们的⾏为,那么使⽤策略模式可以动态地让⼀个对象在许多⾏为中选择⼀种⾏为。
⼀个系统需要动态地在⼏种算法中选择⼀种。
如果⼀个对象有很多的⾏为,如果不⽤恰当的模式,这些⾏为就只好使⽤多重的条件选择语句来实现。
优点缺点算法可以⾃由切换策略类会增多避免使⽤多重条件判断所有策略类都需要对外暴露扩展性良好环境类(Context):持有抽象策略类的引⽤,⽤来操作策略的上下⽂环境。
抽象策略类(Strategy):策略的抽象类或接⼝,给出所需实现接⼝。
具体策略类(ConcreteStrategy):具体的策略实现。
Demo有⼏种鹅:天鹅、野鹅、灰鹅,鹅有各种⾏为,如飞、游泳、叫等。
假设天鹅灰鹅飞⾏能⼒⼀般,野鹅飞⾏能⼒优秀;天鹅野鹅游泳能⼒⼀般,灰鹅游泳能⼒优秀。
⾸先看第⼀种⽅法:这种⽅法固然可以实现⽬的,但问题显⽽易见,⼦类过多覆盖⽗类⽅法,代码未复⽤,耦合度很⾼。
使⽤策略模式,简单来说,就是封装⼦类⾏为成接⼝,⽗类包含该接⼝即可。
代码:public interface FlyBehavior {void fly();}public class FlyGood implements FlyBehavior {@Overridepublic void fly() {System.out.println("飞⾏能⼒优秀");}}public class FlyNormal implements FlyBehavior {@Overridepublic void fly() {System.out.println("飞⾏能⼒⼀般");}}public interface SwimBehavior {void swim();}public class SwimGood implements SwimBehavior {@Overridepublic void swim() {System.out.println("游得好");}}public class SwimNormal implements SwimBehavior {@Overridepublic void swim() {System.out.println("游得⼀般");}}public abstract class Goose {//策略接⼝FlyBehavior flyBehavior;SwimBehavior swimBehavior;//其他属性等...public void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior = flyBehavior;}public void setSwimBehavior(SwimBehavior swimBehavior) {this.swimBehavior = swimBehavior;}}public class Swan extends Goose{public Swan() {flyBehavior=new FlyNormal();swimBehavior=new SwimNormal();}}public class WildGoose extends Goose{public WildGoose() {flyBehavior=new FlyGood();swimBehavior=new SwimNormal();}}public class GreyGoose extends Goose{public GreyGoose() {flyBehavior=new FlyNormal();swimBehavior=new SwimGood();}}public class Client {public static void main(String[] args) {Swan swan=new Swan();swan.flyBehavior.fly();WildGoose wildGoose=new WildGoose();wildGoose.swimBehavior.swim();GreyGoose greyGoose=new GreyGoose();greyGoose.flyBehavior.fly();greyGoose.setFlyBehavior(new FlyGood()); //改变某个对象的⾏为greyGoose.flyBehavior.fly();}}运⾏结果:总结本篇⽂章就到这⾥了,希望能给你带来帮助,也希望您能够多多关注的更多内容!。
设计模式——策略模式

设计模式——策略模式⼀、定义与简单实现1、定义策略模式的定义包含三点:定义⼀类算法(接⼝)。
封装每个算法(实现类)。
这类算法的算法可互相替换(实现类之间可互相替换)。
2、UML类图前两点已经成了我们的职业习惯(项⽬中⼀般都是⼀接⼝对应⼀实现类),重点是要弄清楚后⾯的算法互相替换,这个替换是在哪⾥实现的,需要达到什么效果?下⾯是⼀个简单的策略模式的UML图。
定义⼀类算法(接⼝FlyBehavior)封装每个算法(实现类CanFly + NotFly)Duck中定义⼀个FlyBehavior变量,然后运⽤组合的⽅式,CanFly、NotFly可以互换定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独⽴于使⽤算法的客户,使Duck与Fly()解耦,运⽤的设计模式原则:封装变化多⽤组合,少⽤继承针对接⼝编程,不针对实现编程3、简单代码实现/** 飞翔⾏为*/public interface FlyBehavior {void fly();}public class CanFly implements FlyBehavior {@Overridepublic void fly() {System.out.println("I can fly!");}}public class NotFly implements FlyBehavior{@Overridepublic void fly() {System.out.println("I cant fly!");}}/** 叫声*/public interface QuackBehavior {void quack();}public class GaGa implements QuackBehavior{@Overridepublic void quack() {System.out.println("ga ga ...");}}public class GuaGua implements QuackBehavior {@Overridepublic void quack() {System.out.println("gua gua ...");}}public class NotQuack implements QuackBehavior {@Overridepublic void quack() {System.out.println("...... ??");}}/** 鸭⼦*/public interface DuckInterface {void swim();void display();void performFly();void performQuack();void setFlyBehavior(FlyBehavior flyBehavior);void setQuackBehavior(QuackBehavior quackBehavior); }public class Duck implements DuckInterface {private FlyBehavior flyBehavior;private QuackBehavior quackBehavior;@Overridepublic void swim() {System.out.println("I am swimming!");}@Overridepublic void display() {System.out.println("I have white feathers!");}@Overridepublic void performFly() {if (flyBehavior == null){System.out.println("no flyBehavior!");return;}flyBehavior.fly();}@Overridepublic void performQuack() {if (quackBehavior == null){System.out.println("no quackBehavior!");return;}quackBehavior.quack();}@Overridepublic void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior = flyBehavior;}@Overridepublic void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior = quackBehavior;}}public class Main {public static void main(String[] args) {FlyBehavior canFly = new CanFly();FlyBehavior notFly = new NotFly();//⼀个会飞的鸭⼦DuckInterface duck = new Duck();duck.setFlyBehavior(canFly);duck.performFly();//现在翅膀断了duck.setFlyBehavior(notFly);duck.performFly();}}⼆、框架中的策略模式框架中实现最明显的就是Mybatis中的执⾏器Executor,UML图虽然与给出的标准的策略模式UML有所差异,但是实现的效果⼀致。
设计模式之策略模式(Strategy)详解及代码示例

设计模式之策略模式(Strategy)详解及代码⽰例⼀、策略模式的定义 策略(Strategy)模式的定义:该模式定义了⼀系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使⽤算法的客户。
策略模式属于对象⾏为模式,它通过对算法进⾏封装,把使⽤算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进⾏管理。
⼆、策略模式优缺点 策略模式的主要优点如下。
多重条件语句不易维护,⽽使⽤策略模式可以避免使⽤多重条件转移语句。
符合开闭原则,可以在不修改原代码的情况下,灵活增加新算法。
算法使⽤和实现隔离分离,提⾼算法的保密性和安全性。
策略模式提供了⼀系列的可供重⽤的算法族,恰当使⽤继承可以把算法族的公共代码转移到⽗类⾥⾯,从⽽避免重复的代码。
策略模式可以提供相同⾏为的不同实现,客户可以根据不同时间或空间要求选择不同的。
其主要缺点如下。
客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。
策略模式造成很多的策略类。
三、策略模式的结构与实现 策略模式是准备⼀组算法,并将这组算法封装到⼀系列的策略类⾥⾯,作为⼀个抽象策略类的⼦类。
策略模式的重⼼不是如何实现算法,⽽是如何组织这些算法,从⽽让程序结构更加灵活,具有更好的维护性和扩展性,现在我们来分析其基本结构和实现⽅法。
策略模式的主要⾓⾊如下。
抽象策略(Strategy)类:定义了⼀个公共接⼝,各种不同的算法以不同的⽅式实现这个接⼝,环境⾓⾊使⽤这个接⼝调⽤不同的算法,⼀般使⽤接⼝或抽象类实现。
具体策略(Concrete Strategy)类:实现了抽象策略定义的接⼝,提供具体的算法实现。
环境(Context)类:持有⼀个策略类的引⽤,最终给客户端调⽤。
其结构图如图所⽰: 代码实现如下:public class StrategyPattern{public static void main(String[] args){Context c=new Context();Strategy s=new ConcreteStrategyA();c.setStrategy(s);c.strategyMethod();System.out.println("-----------------");s=new ConcreteStrategyB();c.setStrategy(s);c.strategyMethod();}}//抽象策略类interface Strategy{public void strategyMethod(); //策略⽅法}//具体策略类Aclass ConcreteStrategyA implements Strategy{public void strategyMethod(){System.out.println("具体策略A的策略⽅法被访问!");}}//具体策略类Bclass ConcreteStrategyB implements Strategy{public void strategyMethod(){System.out.println("具体策略B的策略⽅法被访问!");}}//环境类class Context{private Strategy strategy;public Strategy getStrategy(){return strategy;}public void setStrategy(Strategy strategy){this.strategy=strategy;}public void strategyMethod(){strategy.strategyMethod();}} 测试结果如下:具体策略A的策略⽅法被访问!-----------------具体策略B的策略⽅法被访问! 如下补充⼀个促销策略模式:interface PromotionStrategy {void doPromotion();}class FanXianPromotionStrategy implements PromotionStrategy{@Overridepublic void doPromotion() {System.out.println("返现促销");}}class LiJianPromotionStrategy implements PromotionStrategy {@Overridepublic void doPromotion() {System.out.println("⽴减促销");}}class ManJianPromotionStrategy implements PromotionStrategy{@Overridepublic void doPromotion() {System.out.println("满减促销");}}class PromotionActivity {private PromotionStrategy promotionStrategy;public PromotionActivity(PromotionStrategy promotionStrategy) {this.promotionStrategy = promotionStrategy;}public void executePromotionStrategy(){promotionStrategy.doPromotion();}}public class Test {public static void main(String[] args) {PromotionActivity promotionActivity618 = new PromotionActivity(new LiJianPromotionStrategy());PromotionActivity promotionActivity1111 = new PromotionActivity(new FanXianPromotionStrategy());promotionActivity618.executePromotionStrategy();promotionActivity1111.executePromotionStrategy();}}四、策略模式的应⽤场景 策略模式在很多地⽅⽤到,如 Java SE 中的容器布局管理就是⼀个典型的实例,Java SE 中的每个容器都存在多种布局供⽤户选择。
策略模式在运行时选择算法的设计模式

策略模式在运行时选择算法的设计模式设计模式是一种被广泛应用于软件开发中的解决问题的方案。
其中,策略模式是一种在运行时选择算法的设计模式,它允许在不改变对象的结构的情况下,动态地选择需要执行的算法。
一、策略模式的定义和原则策略模式是一种行为型设计模式,它通过定义一系列的算法,封装每个算法,并使它们可以互换。
策略模式使得算法的选择与使用的客户端代码分离,实现了代码的解耦。
策略模式遵循以下原则:1. 将变化的部分独立出来:策略模式将算法封装成策略类,将变化的部分(不同的算法)与不变的部分(调用算法的代码)分离开来。
2. 面向接口编程:策略模式通过定义统一的接口或抽象类,让具体的策略类实现该接口或继承该抽象类,确保所有的策略类都具有一致的行为。
3. 运行时选择算法:策略模式允许在运行时动态地选择要使用的算法,而不是在编译时固定地选择。
二、策略模式的结构策略模式由三个核心部分组成:上下文(Context)、策略(Strategy)和具体策略(Concrete Strategy)。
1. 上下文(Context):上下文是一个包含策略的引用的类,它在运行时通过策略的具体实现来执行某个算法。
2. 策略(Strategy):策略是一个抽象类或接口,它定义了算法的公共接口。
3. 具体策略(Concrete Strategy):具体策略是策略的具体实现,它实现了策略接口或抽象类中定义的算法。
三、策略模式的应用场景策略模式通常在以下情况下使用:1. 当一个系统需要多个算法中的一种来执行特定任务时,可以使用策略模式。
2. 当一个系统需要动态地切换算法时,可以使用策略模式。
3. 当一个对象需要根据不同的情况执行不同的算法时,可以使用策略模式。
四、策略模式的优缺点策略模式具有以下优点:1. 算法的选择与使用的客户端代码分离,增强了代码的灵活性和可维护性。
2. 策略模式将每个算法封装成独立的类,方便了算法的复用和扩展。
3. 策略模式符合开闭原则,增加新的策略不需要修改现有代码。
黑马程序员C语言教程:常见的六种设计模式

常见的六种设计模式以及应用场景设计模式是对设计原则的具体化。
用江湖话说就是武林秘籍,总结出来的一些固定套路,可以帮助有根基的程序员迅速打通任督二脉,从此做什么都特别快。
常用的模式及其场景如下。
1) 单例模式。
单例模式是一种常用的软件设计模式。
在它的核心结构中只包含一个被称为单例类的特殊类。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
2) 工厂模式。
工厂模式主要是为创建对象提供了接口。
应用场景如下:a. 在编码时不能预见需要创建哪种类的实例。
b. 系统不应依赖于产品类实例如何被创建、组合和表达的细节。
3) 策略模式。
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换。
此模式让算法的变化独立于使用算法的客户。
应用场景如下。
a. 一件事情,有很多方案可以实现。
b. 我可以在任何时候,决定采用哪一种实现。
c. 未来可能增加更多的方案。
d. 策略模式让方案的变化不会影响到使用方案的客户。
举例业务场景如下。
系统的操作都要有日志记录,通常会把日志记录在数据库里面,方便后续的管理,但是在记录日志到数据库的时候,可能会发生错误,比如暂时连不上数据库了,那就先记录在文件里面。
日志写到数据库与文件中是两种算法,但调用方不关心,只负责写就是。
4) 观察者模式。
观察者模式又被称作发布/订阅模式,定义了对象间一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
应用场景如下:a.对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
b.对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
5) 迭代器模式。
应用场景如下:当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式。
其实stl容器就是很好的迭代器模式的例子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【黑马程序员济南】策略设计模式
上一次我们聊了简单工厂模式,让大家了解到了如何使程序具备更高的解耦性,使每一个功能代码都独立出来,今天我们和大家聊一下另一种解耦的设计模式,它就是策略设计模式。
什么是策略设计模式:它定义了算法家族,分别封装起来,让他们之间可以项目替换,此模式让算法的变化,不会影响到算法的客户。
我们可以这样理解,工厂模式是让我们内部的构造变得高内聚低耦合,而策略模式是让我们的内部代码和外部客户端代码不直接进行联系,而是通过一个桥梁来进行沟通,并且使相同算法或功能的代码进行封装。
给大家用UML图
大家通过上方的UML图可以看出,策略设计模式的思想为封装算法类,通过一个上下文的类,来沟通客户端和服务器端的逻辑代码。
给大家代码演示一下:
/**
* 此类为抽象的基类,用于具体的代码来继承使用
* @author zhe
*
*/
publicabstractclass StragerySuper {
//算法方法,用于具体的逻辑算法来实现
publicabstractvoid AlphInterfact();
}
具体的实现代码类:
/**
*具体的算法实现代码A
*
**/
class ConcreteA extends StragerySuper{
@Override
publicvoid AlphInterfact() {
System.out.print("算法A的实现类");
}
}
/**
*具体的算法实现代码B
*
**/
class ConcreteB extends StragerySuper{
@Override
publicvoid AlphInterfact() {
System.out.print("算法B的实现类");
}
}
/**
*具体的算法实现代码C
*
**/
class ConcreteC extends StragerySuper{
@Override
publicvoid AlphInterfact() {
System.out.print("算法c的实现类");
}
}
上下文类,作为连接客户端和后台代码端的桥梁
/**
*Context类,用于和外界进行联系的类,用来对StrategySuper的引用
***/
class Context{
StragerySuper stragerySuper;
public Context(StragerySuper stragerySuper){
//初始化构造函数,传递具体的策略对象
this.stragerySuper = stragerySuper;
}
//上下文接口,根据具体的策略对象,调用其算法的方法,执行具体的逻辑方法publicvoid ContextInterface(){
stragerySuper.AlphInterfact();
}
}
客户端代码:
/**
*客户端代码,通过Context中间类,来实现对具体实现类的调用
**/
class Client{
Context context;
publicvoid main(){
//客户端通过context执行具体的逻辑代码
context = new Context(new ConcreteA());
context.ContextInterface();
context = new Context(new ConcreteB());
context.ContextInterface();
context = new Context(new ConcreteC());
context.ContextInterface();
}
}
大家看策略模式是不是和简单工厂模式有点雷同,下一次我们把两个设计模式结合起来去实现,大家会发现我们的代码会更简洁和高效,每一种设计模式不是独立,他们都是可以交叉使用的。
我们只有不断的在我们的代码中去应用到这些设计模式,那么我们的编程思想会越来越灵活。