终于得空,本来想看看android的源码,但是想起以前看源码时总有点晕,不清楚为什么要这样设计代码结构,所以决定先把设计模式的相关知识学习一下。

买了n久的大话设计模式啊。。终于下定决心开始啃了。。。泪奔。。。

1.简单工厂模式

感觉简单工厂模式就是利用多态的特性,在实例化时,根据具体的子类,来实现不同的执行效果。

/**收费模式:正常,反现,折扣*/
enum Charge{NORMAL,RETURN,REBATE};/**收费接口*/
interface CashSuper
{public double acceptCash(double money);
}class CashNormal implements CashSuper
{@Overridepublic double acceptCash(double money) {// TODO Auto-generated method stubreturn money;}
}class CashRebate implements CashSuper
{double rate;CashRebate(double rate){this.rate=rate;}@Overridepublic double acceptCash(double money) {// TODO Auto-generated method stubreturn rate*money;}}class CashReturn implements CashSuper
{@Overridepublic double acceptCash(double money) {// TODO Auto-generated method stubif(money>300){return money-100;}return money;}}class CashFactory
{public static CashSuper getAcceptCash(Charge charge){switch(charge){case NORMAL:return new CashNormal();case RETURN:return new CashReturn();case REBATE:return new CashRebate(0.8);default:return new CashNormal();}}
}public class SimpleFactory {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubCashSuper cashSuper;cashSuper=CashFactory.getAcceptCash(Charge.NORMAL);System.out.println("Normal(1000):"+cashSuper.acceptCash(1000));cashSuper=CashFactory.getAcceptCash(Charge.REBATE);System.out.println("Rebate(1000):"+cashSuper.acceptCash(1000));cashSuper=CashFactory.getAcceptCash(Charge.RETURN);System.out.println("Return(1000):"+cashSuper.acceptCash(1000));}}

子类实现接口,工厂类通过一个静态方法返回接口类型的对象。

2.策略模式

感觉就是在原来的工厂类的基础里,多组合了一个成员变量。

class CashContext
{CashSuper mCashSuper;public CashContext(CashSuper cashSuper){mCashSuper=cashSuper;}public double acceptCash(double money){return mCashSuper.acceptCash(money);}
}class CashContext2
{CashSuper mCashSuper;public CashContext2(Charge charge){switch(charge){case NORMAL:mCashSuper=new CashNormal();break;case REBATE:mCashSuper=new CashRebate(0.8);break;case RETURN:mCashSuper=new CashReturn();break;default:mCashSuper=new CashNormal();}}public double acceptCash(double money){return mCashSuper.acceptCash(money);}
}public class Strategy {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubCashContext cashContext;cashContext=new CashContext(new CashNormal());System.out.println("Normal(1000):"+cashContext.acceptCash(1000));cashContext=new CashContext(new CashRebate(0.8));System.out.println("Rebate(1000):"+cashContext.acceptCash(1000));cashContext=new CashContext(new CashReturn());System.out.println("Return(1000):"+cashContext.acceptCash(1000));CashContext2 cashContext2;cashContext2=new CashContext2(Charge.NORMAL);System.out.println("Normal(1000):"+cashContext2.acceptCash(1000));cashContext2=new CashContext2(Charge.REBATE);System.out.println("Rebate(1000):"+cashContext2.acceptCash(1000));cashContext2=new CashContext2(Charge.RETURN);System.out.println("Return(1000):"+cashContext2.acceptCash(1000));}}

还需要进一步学习。。。现在只知其实现,不知其为何这样实现。。。

Head first

看了Head first的策略模式,感觉策略模式的核心就是要针对接口编程,而非针对实现编程,同时要尽量用"has a"去组合,而非用"is a"去继承.

比如鸟具有fly的能力,但是有的鸟能用翅膀飞,有的鸟靠火箭飞(神火飞鸦),所以在设计鸟这个类时,组合一个fly的接口,在实例化鸟后,再通过set方法向鸟的fly的成员变量set具体是翅膀飞还是火箭飞。

大话设计模式1 简单工厂模式 策略模式相关推荐

  1. 大话设计模式之简单工厂模式

    一.简单工厂模式 1.起因 最近在看一本大话设计模式一书,感觉上面讲述的富有故事性,引导你一步一步的走进设计模式的世界.首先我先看到的是简单工厂模式,对此我想给自己做一个总结,给自己做一个提示. 2. ...

  2. 【大话设计模式】——简单工厂模式

    一.概念 简单工厂模式(Simple Factory Pattern)属于创建型模式,又叫做静态工厂方法模式(Static FactoryMethod Pattern),可是不属于23GOF设计模式之 ...

  3. 【Design pattern】简单工厂过渡策略模式

    把自己当做小菜来跟学<大话设计模式>,跟着故事的思路来走 简单工厂模式:实现一个计算器代码 策略模式:商场打折代码 根据大鸟和小菜的故事,一步步的完善问题的过程!

  4. 大话设计模式笔记(二)——商品促销 策略模式

    第二章商品促销--策略模式 需求:商品价格计算,并增加折扣条件 工厂模式UML图 在工厂模式中,调用端代码会通过折扣工厂类生成折扣对象,折扣对象调用折扣方法.这里关联了两个类,工厂类和抽象折扣类. 策 ...

  5. 简单工厂和策略模式结合

    商场促销活动:打折.满额返现等等 主函数对工厂模式和策略模式结合的调用: class Program     {         static void Main(string[] args)     ...

  6. 1、大话设计模式,简单工厂

    1.通过设计模式,找到封装变化,对象间松散耦合,针对接口编程的感觉,设计易维护.易扩展.易复用.灵活性好的程序. 2.通过封装,继承,多态把程序的耦合度降低.把业务逻辑与界面逻辑分开,让它们之间的耦合 ...

  7. 设计模式之简单工厂模式与策略模式

    目录 一.简单工厂模式 二.策略模式 三.简单工厂和策略模式的相同和不同点 四.SpringBoot中用简单工厂搭配策略模式 一.简单工厂模式 概述:定义一个工厂类,它可以根据参数的不同返回不同的实例 ...

  8. C++设计模式-使用Qt框架模拟策略模式(Strategy)商场促销

    UML图如下: 如果单使用策略模式,会出现这个问题: 客户端判断使用哪个算法! 这里可以用简单工厂与策略模式结合! 运行截图如下: 源码如下: cash.h #ifndef CASH_H #defin ...

  9. C++设计模式-使用Qt框架模拟策略模式(Strategy)+简单工厂实现商场促销

    商城促销: 1.简单工厂模式:客户端认识两个类,CashSuper与CashFactory 2.简单工厂模式 + 策略模式:客户端只要认识CashContext就可以了,更加降低耦合性 策略模式解析: ...

最新文章

  1. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树)
  2. 一张图看懂小程序全生态
  3. ×××S 2012 交互式报表 -- 同步交互式排序
  4. WSL2构建android10+kernel源码适配pixel
  5. Oracle开发技能提升之层次查询全面解析
  6. 非极大值抑制(Non-Maximum Suppression,NMS)
  7. Jenkins+gitlab配置身份验证令牌
  8. 各个编程语言都有哪些「黑点」?
  9. 打开Excel新窗口的方法
  10. 免费且好玩的API接口
  11. 对话三星张代君:Bixby到底与Siri有什么不同?
  12. c4d怎么做成html,厉害了!擅长C4D制作可瞬间提升你的设计逼格
  13. anaconda 安装 TensorFlow 过程记录
  14. Android 权限被拒绝,跳转至权限设置界面
  15. 洛谷——B2015 计算并联电阻的阻值(java)
  16. QT 幸运大转盘动画
  17. H5学习之路之audio音频播放
  18. 平板电脑怎么使用计算机,苹果平板电脑怎么使用 苹果平板电脑使用方法【详解】...
  19. OpenAI Codex,GitHub Copilot 和cheat.sh 三个代码建议工具对比
  20. 检测到可疑访问 php,php.net被Chrome/Firefox浏览器标注为可疑站点

热门文章

  1. 解决server pool中没有servers的问题
  2. H5前端开发以及小程序开发之路
  3. 【电商】管理后台篇--库存管理(货位、调拨、盘点)
  4. Maven之阿里云镜像仓库配置
  5. python分类下取得所有子类_Python中所有的异常类都是( ) 的子类。_学小易找答案...
  6. 有什么结实耐用的蓝牙耳机推荐?颜值比较高的品牌蓝牙耳机分享
  7. 雅虎没有“防弹衣” 雁鸣
  8. react-----props
  9. 【灵修】治疗腰痛和失眠的好方法——瑜伽练习
  10. 孕妇电子计算机房辐射,孕妇通信机房辐射大吗