策略模式

封装,策略模式,Asp换脸

陌路散爱 提交于 2020-02-01 02:55:53
1.简单封装 1》计算类 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 计算 { class operater1 { private int x; private int y; private string opers; private int answer; public int X { set { x = value; } } public int Y { set { y = value; } } public string Opers { set { opers = value; } } public int Answer { get { return answer; } } public void operation() { switch (opers) { case "+": answer = x + y; break; case "-": if (x > y) { answer = x - y; } else { throw new Exception("被减数不能小于减数!"); } break; case "*": answer = x * y; break; case "/": if (y == 0) { throw

封装逻辑用策略模式实现

爷,独闯天下 提交于 2020-02-01 02:08:24
运行结果: 策略封装代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace shuxuefudao { public interface ITaxStragety { int Calcul(int a,int b); } class Class2 : ITaxStragety { public int Calcul(int a, int b) { return a + b; } } class sub : ITaxStragety { public int Calcul(int a, int b) { return a - b; } } class sheng : ITaxStragety { public int Calcul(int a, int b) { return a *b; } } class chu : ITaxStragety { public int Calcul(int a, int b ) { return a / b; } } class tiaoyong { public int c=0; public int n=0; public void yunsuan(string m) { if(m=="+") {

实现封装与策略模式

我怕爱的太早我们不能终老 提交于 2020-02-01 02:03:45
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> ///计算 /// </summary> public abstract class jisuanqi //抽象类 { public abstract int jisuan(int left, int right);//抽象方法 } public class jia : jisuanqi //加法类继承抽象类 { public override int jisuan(int left, int right)//重写抽象方法 { int jieguo = 0; jieguo = left + right; return jieguo; } } public class jian : jisuanqi { public override int jisuan(int left, int right) { int jieguo = 0; jieguo = left - right; return jieguo; } } public class cheng : jisuanqi { public override int jisuan(int left, int right) { int

策略模式及使用Spring实现策略模式+工厂模式

走远了吗. 提交于 2020-01-31 10:38:22
一、策略模式 策略模式 定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换 1、策略模式主要角色 主要角色如下 : 封装角色(Context):也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化 抽象策略角色(Strategy):策略家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性 具体策略角色(ConcreteStrategy):实现抽象策略中的操作,该类含有具体的算法 2、实现策略模式 //抽象策略角色 public interface Strategy { //策略模式的运算法则 void doSomething ( ) ; } //具体策略角色 public class ConcreteStrategy1 implements Strategy { @Override public void doSomething ( ) { System . out . println ( "具体策略1的运算法则..." ) ; } } //具体策略角色 public class ConcreteStrategy2 implements Strategy { @Override public void doSomething ( ) { System . out . println ( "具体策略2的运算法则..." )

C++设计模式——策略模式

不羁岁月 提交于 2020-01-27 02:38:38
策略模式 在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。 策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况。就像上面的加班工资,不同的加班情况,有不同的算法。我们不能在程序中将计算工资的算法进行硬编码,而是能自由的变化的。这就是策略模式。 UML类图 Strategy:定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法; ConcreteStrategy:实现Strategy接口的具体算法; Context:使用一个ConcreteStrategy对象来配置;维护一个对Stategy对象的引用,同时,可以定义一个接口来让Stategy访问它的数据。 使用场合 当存在以下情况时使用Strategy模式: 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法; 需要使用一个算法的不同变体; 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构; 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现

20.设计模式_策略者模式

人盡茶涼 提交于 2020-01-26 18:47:44
一、引言   前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解。 二、策略者模式介绍 2.1 策略模式的定义   在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税、外商投资企业或外商企业所得税和个人所得税,针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应计算方式。如果不采用策略模式来实现这样一个需求的话,可能我们会定义一个所得税类,该类有一个属性来标识所得税的类型,并且有一个计算税收的CalculateTax()方法,在该方法体内需要对税收类型进行判断,通过if-else语句来针对不同的税收类型来计算其所得税。这样的实现确实可以解决这个场景吗,但是这样的设计不利于扩展,如果系统后期需要增加一种所得税时,此时不得不回去修改CalculateTax方法来多添加一个判断语句,这样明白违背了“开放——封闭”原则。此时,我们可以考虑使用策略模式来解决这个问题,既然税收方法是这个场景中的变化部分,此时自然可以想到对税收方法进行抽象。具体的实现代码见2.3部分。   前面介绍了策略模式用来解决的问题,下面具体给出策略的定义。策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的类中

Head First设计模式之目录

孤街醉人 提交于 2020-01-25 16:57:21
  这是学习的第一个设计模式,而书中写的实例相对比较复杂,参考了网上的文章进行总结 一、定义   策略模式(strategy pattern): 定义了算法族, 分别封闭起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户.    策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的类中,从而使它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 设计原则一   找出应用中需要变化之处,把它们独立出来、不要和那些不需要变化的代码混在一起 设计原则二   针对接口编程,而不是针对实现编程 设计原则三   多用组合、少用继承 二、结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象负责。策略模式通常把一系列的算法包装到一系列的策略类里面。用一句话慨括策略模式就是——“将每个算法封装到不同的策略类中,使得它们可以互换”。 下面是策略模式的结构图: 该模式涉及到三个角色: 环境角色(Context):持有一个Strategy类的引用 抽象策略角色(Strategy):这是一个抽象角色,通常由一个接口或抽象类来实现。此角色给出所有具体策略类所需实现的接口。 具体策略角色(ConcreteStrategy):包装了相关算法或行为。 三、实现 以下以计算个人所得税为例 namespace StrategyPattern

聚合支付-- 使用策略模式实现聚合支付流程(本文只包含对接多个支付平台的设计,不包含支付实现)

﹥>﹥吖頭↗ 提交于 2020-01-24 07:18:06
策略模式概要 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。 角色的划分 这个模式涉及到三个角色: ● 环境(Context)角色:持有一个Strategy的引用。 ● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。 ● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。 策略模式实现聚合支付流程图 1、渠道表设计 #### 1 、渠道表 ```clike SET FOREIGN_KEY_CHECKS = 0 ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Table structure for payment_channel -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- DROP TABLE IF EXISTS `payment_channel` ; CREATE TABLE `payment_channel` ( `ID` int ( 11 ) NOT NULL AUTO_INCREMENT COMMENT 'ID' , `CHANNEL_NAME` varchar (

[转帖]IPSec介绍

时间秒杀一切 提交于 2020-01-23 23:34:50
https://blog.csdn.net/NEUChords/article/details/92968314 1.IPSEC协议簇安全框架 a.IPSec简介 IPSec(Internet Protocol Security):是一组基于网络层的,应用密码学的安全通信协议族。IPSec不是具体指哪个协议,而是一个开放的协议族。 IPSec协议的设计目标:是在IPV4和IPV6环境中为网络层流量提供灵活的安全服务。 IPSec VPN:是基于IPSec协议族构建的在IP层实现的安全虚拟专用网。通过在数据包中插入一个预定义头部的方式,来保障OSI上层协议数据的安全,主要用于保护TCP、UDP、ICMP和隧道的IP数据包。 b.IPSec协议族 IPSec VPN体系结构主要由AH、ESP和IKE协议套件组成。 IPSec通过ESP来保障IP数据传输过程的机密性,使用AH/ESP提供数据完整性、数据源验证和抗报文重放功能。 ESP和AH定义了协议和载荷头的格式及所提供的服务,但却没有定义实现以上能力所需具体转码方式,转码方式包括对数据转换方式,如算法、密钥长度等。 为简化IPSec的使用和管理,IPSec还可以通过IKE进行自动协商交换密钥、建立和维护安全联盟的服务。具体如下: 1.AH协议:AH是报文头验证协议,主要提供的功能有数据源验证、数据完整性校验和防报文重放功能。然而

Linux双网卡绑定

别等时光非礼了梦想. 提交于 2020-01-20 23:52:43
1 什么是bond 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels 2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。可以通过以下命令确定内核是否支持 bonding: 1 2 3 [root@lixin network-scripts] #cat /boot/config-2.6.32-573.el6.x86_64 |grep -i bonding CONFIG_BONDING=m [root@lixin network-scripts] # 2 bond的模式 bond的模式常用的有两种: mode=0(balance-rr) 表示负载分担round-robin,并且是轮询的方式比如第一个包走eth0,第二个包走eth1,直到数据包发送完毕。 优点:流量提高一倍 缺点:需要接入交换机做端口聚合,否则可能无法使用 mode=1(active-backup) 表示主备模式,即同时只有1块网卡在工作。 优点:冗余性高 缺点:链路利用率低,两块网卡只有1块在工作 bond其他模式: mode=2(balance-xor)(平衡策略) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port