抽象.封装,具体事情做得越多,越容易犯错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少.好象我们从编程序中也能悟出人生道理.(百度百科) 不断抽象封装,让复杂事物变得简单,以便于让我们的大脑能够进行处理. 我记得有那么一天,小吴带着女朋友去城西银泰买手机,他们走进一家小米手机店,对卖家(seller)说:“给我一部小米的手机看看?”卖家心里想:“废话,在小米店里,我还能卖苹果手机给你啊!直接说手机呀” 在C语言面向过程下,我们编程就是这样的,必须…
不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过策略类来决定使用哪个实例的哪个方法. 一.两种模式的公共相同部分 下面,我们假设有一台红白机,里面有一些游戏,每个游戏拥有play(玩)和uninstall(卸载)两个方法. 按照工厂和策略模式,我们抽象出来一个Game接口: public interface Game { void play();…
1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(value === ''){ return errMsg; } }, minLength:function(value,length,errMsg){ if(value.length < length){ return errMsg; } } } var validator = function(){ t…
一.策略模式 策略模式:封装易变化的算法,可互相替换. GoF<设计模式>中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.该模式使得算法可独立于它们的客户变化. 比如:一个推送服务类,推送的方式,可以分为:QQ推送.邮箱推送.App推送.PC插件推送. 这里讲两个点: 1.推送方式可以互相替换: 2.这些推送方式只是单纯的属于推送服务这个类本身. 好好琢磨关键词:相互替换 二.命令模式 命令模式:解决“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题. GoF&l…
第一章:工厂模式: 通过封装,继承,多态解耦合 业务逻辑和界面逻辑分开 用单独的类创造实例,工厂:创造实例 工厂模式还可以用反射来实现,nsstringFromClass UML类图 聚合表示一众弱的拥有关系,A对象可以包含B对象,但B对象不是A对象的一部分 面向对象的变成,不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式: 把if else封装在stragy中,在控制器中就不用写这些if else了…
策略模式定义了算法家族,在调用算法家族的时候不感知算法的变化,客户也不会受到影响. 下面用<大话设计模式>中的一个实例进行改写. 例:超市中经常进行促销活动,促销活动的促销方法就是一个个策略,如“满一百减20”,“打八折”等.现在实现策略模式,用CashContext生产策略,并完成策略的调用. 1.首先定义所有策略的接口. package cash type cashSuper interface { AcceptMoney(money float64) float64 } 2.定义三个子类…
策略模式 定义了算法族,分别封装起来,让它们之间可以互相替换.此模式让算法的变化独立于使用算法的客户. 作为动态语言,Python实现策略模式非常容易,只要所有算法提供相同的函数即可. import os class Script: def __init__(self, cmd): self._cmd = cmd def run_by(self, runner): runner.run(self._cmd) class Runner: def run(self, cmd): os.system(…
策略模式: 策略模式 概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 适用性 1.许多相关的类仅仅是行为有异.“策略”提供了一种用多个行为中的一个行为来配置一个类的方法. 2.需要使用一个算法的不同变体. 3.算法使用客户不应该知道的数据.可使用策略模式以避免暴露复杂的.与算法相关的数据结构. 4.一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现. 将相关的条件分支移入它们各自的Strategy类中以代替这…
strategy模式,即策略模式.个人觉得吧,策略模式更多的是一种思维方式. 首先我们要知道,为什么需要策略模式.举个例子,比如用程序输出今天下午去玩什么. PlayGame 玩游戏 package site.wangxin520.gof.strategy.demo; /** * 玩游戏的类 * @author wangXgnaw * */ public class PlayGame { /** * 玩游戏的方法 */ public void playGame(){ System.out.pri…
一.策略模式(strategy) [策略接口] /*** * "策略"接口 */ package cn.sxt.strategy; public interface Strategy { public double getPrice(double standrdPrice);//传进去一个原价,根据策略返回一个不同的价格 } [策略管理类] /*** * 管理算法的类.负责和策略类交互.这样算法可以独立于客户端.可以通过构造器注入或set方法或在配置文件注入 */ package cn…