一起学习设计模式-策略模式

大家好:

我近期写了一个TCP长连接的框架,封装的Netty,序列化采用的是PB,内存缓存用的Google的Guava。项目托管在GitHub上,开源希望大家能用起来并且一起维护这个项目。我是做游戏服务器的,像客户端的引擎框架有Cocos2d , Unity等。而服务器没有相对来说比较好的开源的架构(或者说鄙人学识浅薄没有发现)。我也经历了几个游戏从开发到上线的这样一个过程,所以也看到过几个比较优秀的框架,现在的想法是能够开源一个服务器框架,然后大家各抒己见共同维护这个框架。因为我的经验尚短,框架中难免有疏漏或者不稳妥之处,所以希望大牛能多提供意见。

GitHub地址:https://github.com/luzhiming/opentcpserver

设计模式之策略模式-可以让你随时更换不同的算法使用不同的策略完成相应的逻辑功能。

策略模式源代码:https://github.com/luzhiming/DesignPattern/tree/master/DesignPattern

策略模式讲解视频:(由于耳麦原因音质不是很好-如果朋友们哪里觉得听的不清楚的可以给我留言,我再重新录制或者给大家讲一遍也可以)http://pan.baidu.com/s/1dDGnYJB

策略模式中几个比较重要的角色

1.抽象策略角色(一个抽象类或者一个接口)

2.具体策略实现(实现抽象策略角色)

3.策略持有者

我的CSDN关于策略模式的例子:让你用不同的笔写字

今天再举一个例子:策略模式之高考

1.抽象策略角色-试卷

2.具体策略角色 - A卷 B卷 C卷 D卷

3.山东省,河北省,北京市

为什么使用策略模式呢?

这里使用策略模式就是为了可以随时更换不同的策略(试卷类型)。

1.抽象策略角色(试卷)

package com.luzm.stratagy;

public interface TestPaper {
	/**
	 * 获取考试内容
	 * @return
	 */
	public String getTestContent();
}

2.具体策略 A B C D 卷

A卷

package com.luzm.stratagy;

public class TestPaperA implements TestPaper {

	@Override
	public String getTestContent() {
		return "This is TestPaperA Content";
	}

}

B卷

package com.luzm.stratagy;

public class TestPaperB implements TestPaper {

	@Override
	public String getTestContent() {
		return "This is TestPaperB Content";
	}

}

C卷

package com.luzm.stratagy;

public class TestPaperC implements TestPaper {

	@Override
	public String getTestContent() {
		return "This is TestPaperC Content";
	}

}

D卷

package com.luzm.stratagy;

public class TestPaperD implements TestPaper {

	@Override
	public String getTestContent() {
		return "This is TestPaperD Content";
	}

}

3.抽象持有者

package com.luzm.stratagy;

public abstract class TestCity {
	private TestPaper testPaper;

	public TestPaper getTestPaper() {
		return testPaper;
	}

	public void setTestPaper(TestPaper testPaper) {
		this.testPaper = testPaper;
	}

	public void printTestContent(){
		if(testPaper == null) {
			System.out.println("NULL - ERR");
			return ;
		}
		System.out.println(testPaper.getTestContent());
	}
}

4.具体持有者

山东

package com.luzm.stratagy;

public class Shandong extends TestCity{

}

河北

package com.luzm.stratagy;

public class HeBei extends TestCity{

}

北京

package com.luzm.stratagy;

public class Beijing extends TestCity{
}

5.使用范例

package com.luzm.stratagy;

public class Test {

	public static void main(String[] args) {
		TestCity tc = new Shandong();
		tc.setTestPaper(new TestPaperA());
		tc.setTestPaper(new TestPaperC());
		tc.printTestContent();

	}
}
时间: 2024-10-27 13:51:28

一起学习设计模式-策略模式的相关文章

2.大话设计模式-策略模式

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace DesignModel 8 { 9 /// <summary> 10 /// 策略模式 11 /// </summary> 12 public class TacticsModel 13 { 14 //对于

设计模式 - 策略模式(Strategy Pattern) 具体解释

策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全部, 禁止转载, 如有须要, 请站内联系. 策略模式: 定义了算法族, 分别封装起来, 让它们之间能够相互替换, 此模式让算法的变化独立于使用算法的客户. 对于父类的子类族须要常常扩展新的功能, 为了使用父类比較灵活的加入子类, 把父类的行为写成接口(interface)的形式; 使用set()方法

数据库学习设计模式--组合模式

介绍: 想必你已经了解了数据结构中的树,ok,组合模式对于你就是一会儿的功夫了.组合模式相对来说比较简单.看一下定义 abstract class Component { protected String name; //这个用来标示一下节点 public Component(String name) { this.name = name; } public abstract void add(Component c);//增加儿子节点 public abstract void remove(C

设计模式 - 策略模式(Strategy Pattern) 详解

策略模式(Strategy Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权所有, 禁止转载, 如有需要, 请站内联系. 策略模式: 定义了算法族, 分别封装起来, 让它们之间可以相互替换, 此模式让算法的变化独立于使用算法的客户. 对于父类的子类族需要经常扩展新的功能, 为了使用父类比较灵活的添加子类, 把父类的行为写成接口(interface)的形式; 使用set()方法,

跟着ZHONGHuan学习设计模式--组合模式

跟着ZHONGHuan学习设计模式 组合模式 介绍: 想必你已经了解了数据结构中的树,ok,组合模式对于你就是一会儿的功夫了.组合模式相对来说比较简单.看一下定义 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构.使得用户对单个对象和组合对象的使用具有一致性. 暂时没有想到好的例子,如果你有,请告诉我.下面我用树来对组合模式进行解释.树的结构是下面的这样的: 没棵树有一个根节点,也有叶子节点和树枝节点,一些结构都是用树结构表示的,例如树形菜单,文件和文件夹目录.那么如何存储管理这样的

设计模式---策略模式Strategy(对象行为型)

1. 概述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理. 2. 应用场景 (1)多个类只区别在表现行为不同,在运行时动态选择具体要执行的行为. (2)需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现. (3)对客户隐藏具体策略(算法)的实现细节,彼此完全独立. 3. 示例 出行旅游:我们可以有几个策略可以考虑:可

设计模式—策略模式

什么是策略模式? 策略模式定义了算法家族,分别封装起来,让它们之间能够相互替换,此模式让算法的变化不会影响到使用算法 的客户. 策略模式是一种定义一系列算法的方法,从概念上看全部这些算法完毕的都是同样的工作,仅仅是实现不同,它可 以以同样的方式调用全部的算法,降低了各种算法类与使用算法之间的耦合. 策略模式的长处? (1)策略模式的Strategy类层为Context类定义了一系列的可供重用的算法和行为.继承有助于析取出这些算法 的公共功能. (2)简化了单元測试(每一个算法都有自己的类,能够通

说说设计模式~策略模式(Strategy)

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.而对于客户端(UI)来说,可以通过IOC再配合工厂模块,实现动态策略的切换,策略模块通常于一个抽象策略对象(interface or abstract class),多个具体策略对象(implement class )和一个调用策略的入口组成. 何时能用到它? 对于UI来说,可能一个功能会有多种实现方式,而且实现方式可能还会有扩展,例如,一个ATM机,它目前支持工行,建行,家行,以后可能又出现了占占银行,而这时,ATM

head first 设计模式 策略模式

HEAD FIRST:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 设计模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换.本模式使得算法可独立于它的客户而变化. 大话设计模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 使用这个模式的原因: 用许多的算法对一类进行计算.那么如果把这些算法强行编码到这个类当中.其实是不可取的.因为很多时候下不同的情况下使用不同的算