当前位置: 首页 > news >正文

模板网站与定制网站的优缺点教育类网站素材

模板网站与定制网站的优缺点,教育类网站素材,传奇新开网站,网站数据库 备份一、背景 Head First 设计模式第一章设计模式入门–策略模式 二、工具箱的工具#xff08;本章#xff09; 1、OO基础 封装 继承 多态 抽象 2、OO原则 封装变化 面向接口编程#xff0c;而非面向实现编程 组合优于继承 3、OO模式 策略模式#xff0c;所谓策略模式就是定义…一、背景 Head First 设计模式第一章设计模式入门–策略模式 二、工具箱的工具本章 1、OO基础 封装 继承 多态 抽象 2、OO原则 封装变化 面向接口编程而非面向实现编程 组合优于继承 3、OO模式 策略模式所谓策略模式就是定义算法族并将其分别封装起来让它们之间可以相互替换此模式让算法的变化独立于使用算法的客户。 算法族白话讲就是一个对象的一组行为但是我们通常将一组行为称之为“一族算法”。 三、例子展示 《Head First设计模式》使用鸭子举例从一开始简单的封装实现鸭子游泳、叫的行为到后来行为的添加之后导致现有设计的弹性不足可复用、可扩展、可维护能力大大折扣作者将OO基础原则结合起来设计一个应对鸭子行为添加时弹性较大的系统这种模式称之为策略模式。 1、初期的鸭子系统 a.UML图 鸭子有游泳、叫以及展示自己品种的能力Duck超类将swim() quack()实现了供子类直接调用展示品种定义为抽象方法供子类去实现。早期看起来采用继承的方式设计好像是没有问题的。 思考一下当出现下面场景时现有的设计还是否合理 如果产品要求有的鸭子是会飞的 如果产品要求并不是所有的鸭子都会叫并且会叫的鸭子叫的方式也有可能不同 2、中期的鸭子系统 a.UML图 首先考虑利用接口定义行为特殊的鸭子实现特定的接口来达到具备某种能力的目的。这种方案看似可行其实对于代码的可复用性是打击性的。例如此次需求需要实现几十种会飞的鸭子那么我们就需要实现几十次的fly方法这个系统几乎没有复用成本是非常高的。 3、最终的鸭子系统 a.UML图 b.如何设计 根据前面提到的设计原则 封装变化我们将飞行行为与呱呱叫行为都独立出来并进行了封装 面向接口编程而非实现在Duck中我们声明了两个变量flyBehavior quackBehavior定义了两个set方法用于修改这两个变量变量的实例是什么我不关心我只关心我能够调用它的fly or quack这样的关键方法就行这些方法具体是如何实现的我就不关心了 组合优于继承在第二条中提到声明了两个变量也就是两个变化的行为Duck与这两个行为之间的关系是Has-a而不是Is-a有时候“有一个”比“是一个”更好 c.模式 而最终的这个系统运用的就是策略模式它将算法族与使用算法的客户独立开来可以相互替换我可以在运行时让鸭子会叫也可以让它不会叫 四、代码 Duck相关 a.Duck package com.markus.designpatterns.chapter1.duck;import com.markus.designpatterns.chapter1.behavior.FlyBehavior; import com.markus.designpatterns.chapter1.behavior.QuackBehavior; import com.markus.designpatterns.chapter1.behavior.concrete.FlyNoWay; import com.markus.designpatterns.chapter1.behavior.concrete.MuteQuack;public abstract class Duck {private FlyBehavior flyBehavior;private QuackBehavior quackBehavior;public Duck() {// 默认鸭子不会飞 不会叫this.flyBehavior new FlyNoWay();this.quackBehavior new MuteQuack();}public void swim() {System.out.println(I can swim!);}abstract public void display();public void performFly(){flyBehavior.fly();}public void performQuack(){quackBehavior.quack();}public void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior flyBehavior;}public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior quackBehavior;} }b.Duck子类 public class DecoyDuck extends Duck{Overridepublic void display() {System.out.println(I am a Decoy Duck!);} } public class MallardDuck extends Duck{Overridepublic void display() {System.out.println(I am a mallard duck!);} } public class RedheadDuck extends Duck{Overridepublic void display() {System.out.println(I am a Redhead Duck!);} } public class RubberDuck extends Duck{Overridepublic void display() {System.out.println(I am a Rubber Duck!);} }2、行为相关 a.Fly public interface FlyBehavior {void fly(); } public class FlyNoWay implements FlyBehavior {Overridepublic void fly() {} } public class FlyWithWings implements FlyBehavior {Overridepublic void fly() {System.out.println(I have wings, so I can fly!);} }b.Quack public interface QuackBehavior {void quack(); } public class MuteQuack implements QuackBehavior {Overridepublic void quack() {} } public class Quack implements QuackBehavior {Overridepublic void quack() {System.out.println(quack);} } public class Squeak implements QuackBehavior {Overridepublic void quack() {System.out.println(squeak);} }3、测试Demo public class DuckDisplayDemo {public static void main(String[] args) {Duck duck new RedheadDuck();duck.display();duck.swim();//默认状态下不会飞、不会叫duck.performFly();duck.performQuack();System.out.println();//进行手动赋能duck.setFlyBehavior(new FlyWithWings());duck.performFly();duck.setQuackBehavior(new Quack());duck.performQuack();} }
http://www.hkea.cn/news/14375305/

相关文章:

  • 企业备案 网站名称网站主页图片怎么换
  • 重庆微信网站建设国内免费crm
  • 宁波网站建设免费咨询合肥做网站便宜mdyun
  • 网站asp精品成品源码网站
  • 龙岩公司网站建设wordpress优酷插件
  • 网站图片设置链接网站建设一般多少钱app
  • 高端科研网站设计网页设计与制作课程思政
  • 哪个网站可以做试卷网站虚拟空间购买
  • 旅游网站框架网站开发环境的安装说明
  • 网站漂浮广告批量网站建设
  • 旅游建设投资公司中网站济南网站建设(选聚搜网络)
  • o2o网站建设代理商网站建设的阶段
  • 网站加载页模板wordpress会员注册怎么搞
  • 兰州微信信息平台网站建设百度快速收录接口
  • 蒙古文网站建设的通知网站不收录
  • 找公司做网站需要咨询什么问题建立网站的费用
  • 建材网站开发个人网站可以做营销吗
  • 太原网站空间wordpress添加自定义tag标签
  • 东莞五金网站建设长沙3合1网站建设电话
  • 黑龙江住房城乡建设厅网站wordpress设置账号
  • 网站网站环境搭建教程口碑好的定制网站建设提供商
  • 网络推广营销网站建设专家网站建设服务商的网站建设流程
  • 网站建设毕业设计任务书创新的江苏网站建设
  • 长沙医疗网站建设工会网站群建设
  • 中英网站建立小程序定制公司设计方案
  • 标志设计网站推荐做毕业设计的网站设计
  • 网站公司建站创建网站 优帮云
  • 网站搭建课程标准怎么修改字体wordpress
  • flash怎么做电子书下载网站湛江企业建站模板
  • 安居网站建设网站设计概述