设计模式 学习笔记(1)简单工厂模式、策略模式
1.简单工厂模式
用一个单独的类来做创造实例的过程。
public class OperationFactory{
public static Operation createOperate(string operate){
Operation oper=null;
switch (operate){
case “+”:
oper=new OperationAdd();break;
case “-”:
oper=new OperationSub();break;
case "*":
oper=new OperationMul();break;
case "/":
oper=new OperationDiv();break;
}
return oper;
}
}
2.策略模式
策略模式定义了算法家族。分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。
算法本身只是一种策略,最重要的是这些算法是随时都可能互相替换的,这就是变化点,而封装变化点是面向对象的一种很重要的思维方式。
(1)策略与工厂模式结合到一起
//维护一个策略对象的引用
class CashContext{
CashSuper cs=null;
public CashContext(string type){ //type参数是一个字符串而不是具体的收费策略对象,表示收费类型
switch (type){
case "正常收费":
CashNormal cs0=new CashNormal();
cs=cs0;
break;
case "满300 返100":
CashReturn cr1=new CashReturn("300","100");
cs=cr1;
break;
case "打8折":
CashRebate cr2=new CashRebate("0.8"); //实例化具体策略的过程由客户端转移到Context类中。
cs=cr2;
break;
}
}
public double GetResult(double money){
return cs.acceptCash(money);
}
public double GetResult(double money){
return cs.acceptCash(money);
}
}
//客户端代码
double total=0.0d;
private void btn_Click(object sender,EventArgs e){
CashContext csuper=new CashContext(cbxType.SelectedItem.ToString());
double totalPrices=0d;
totalPrices=csuper.GetResult(Convert.ToDouble(txtPrice.Text)*Convert.ToDouble(txtNum.Text));
total+=totalPrices;
lbxList.Items.Add("单价"+txtPrices.text+"数量:"+txtNum.Text+" "+cbxType.SelectedItem+" 合计:"+totalPrices.ToString());
}
//简单工厂模式的写法
CashSuper csuper=CashFactory.createCashAccept(cbxType.SelectedItem.ToString());
...=csuper.GetResult(...);
//简单工厂和策略模式结合到一起
CashContext csuper=new CashContext(cbxType.SelectedItem.ToString());
...=csuper.GetResult(...);
简单工厂模式需要认识两个类,CashSuper和CashFactory,而策略模式与简单工厂结合后,客户端就只需要知道一个类 CashContext类就可以了。耦合更低。我们在客户端实例化的是CashContext的对象,调用的是CashContext的方法 GetResult方法,这使得具体的收费算法彻底地与客户端分离。连算法的父类CashSuper都不让客户端认识了。
转载于:https://www.cnblogs.com/xiaobang/archive/2013/05/29/3105637.html
设计模式 学习笔记(1)简单工厂模式、策略模式相关推荐
- 设计模式学习笔记——03 简单工厂 工厂方法 抽象工厂
简单工厂 简单工厂模式也成静态工厂模式,但此模式不符合开闭原则,但仍然很常用 适用范围:工厂类需要创建的对象种类比较少,客户端只需要知道传入工厂类的参数,对于如何创建对象(逻辑)不关心 上段代码: p ...
- 大化设计模式学习笔记(简单工厂模式)
实质:生产具有相同逻辑的构造器类,也就是由一个工厂对象决定创建出哪一种产品类的实例 案例:计算器 demo见https://github.com/mrjdrs/sign-model.git
- 设计模式学习笔记(十七)——Command命令模式
设计模式学习笔记(十七)--Command命令模式 Command命令模式介绍: Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,"行为请求者"与 ...
- 设计模式学习笔记——责任链(Chain of Responsibility)模式
设计模式学习笔记--责任链(Chain of Responsibility)模式 @(设计模式)[设计模式, 责任链模式, chain of responsibility] 设计模式学习笔记责任链Ch ...
- 设计模式学习(四):Strategy策略模式
一.什么是Strategy模式 Strategy的意思是"策略",指的是与敌军对垒时行军作战的方法.在编程中,我们可以将它理解为"算法".无论什么程序,其目的都 ...
- java/android 设计模式学习笔记(7)---装饰者模式
这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是 ...
- Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式
本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...
- 设计模式学习笔记(一)之工厂模式、单例模式
一.工厂模式 (1)简单工厂模式: 1 public interface IProduct { 2 3 public void saleProduct(); 4 5 } 创建一个产品接口,有一个卖产品 ...
- CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)...
策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...
- 【Design pattern】简单工厂过渡策略模式
把自己当做小菜来跟学<大话设计模式>,跟着故事的思路来走 简单工厂模式:实现一个计算器代码 策略模式:商场打折代码 根据大鸟和小菜的故事,一步步的完善问题的过程!
最新文章
- 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】
- 8idmp导入oracle 11g,11g导入8i的dmp文件问题
- html360度视角观赏,360度全景图是如何生成的?
- maven 基本命令
- 如何评价周志华深度森林模型
- Python day17 模块介绍1(time,random)
- 混凝土弹性波速计算公式_混凝土强度与应力波速相关性研究
- Hierachy Viewer无法在真机上使用的解决方法
- 如何将你的微信头像透明化
- 在图片上添加文字并生成图片
- 苹果微信换行怎么打_微信两根毛表情怎么打出来?左右小辫子符号苹果安卓手机教程介绍...
- 云计算、大数据、人工智能傻傻分不清楚?本文详解这三者的关系
- liunx查看ftp服务器文件目录,linux查看ftp服务器目录
- 对外承包工程有哪些条件_哪些企业可以申请办理对外承包工程经营资格
- 华为运营商级路由器配置示例 | EVdPdNd VPLS over SRv6 BE(CE双归接入)
- 智慧城市之城市应急智慧系统
- 入门智能车 | 带你认识PID闭环控制 - 增量式PID实现电机速度闭环
- 如何解决资源管理器被结束任务后的问题,怎么重启或新建资源管理器任务?
- Android apk 逆向工程研究﹣破解 MyTV HD 機種限制手記
- Real-Time Rendering 4th 译文《一》
热门文章
- 做了6年的Java,java视频教程传智播客
- 【微信小程序企业级开发教程】订阅消息功能
- python【蓝桥杯vip练习题库】ALGO-236大小写转换
- python【Matlibplot绘图库】-认识Matploblib
- 基础练习 FJ的字符串
- ftp服务器文件备份,数据备份是十分重要的,下面是通过ftp将本机数据备份到远程服务器的一个例子...
- centos 6.5手动同步ntp时钟_如何安装和配置 Chrony 作为 NTP 客户端? | Linux 中国
- PHP文件在线检测病毒,VIRSCAN 在线病毒检测客户端
- 湖南网络推广中网络SEO竞争越来越激烈,怎么才能实现“弯道超车”呢?
- 网络推广外包专员浅析网络推广外包中网站转化率的发展意义