设计模式(二)策略模式(Strategy)
1.分析项目中变化部分与不变部分
2.多用组合,少用继承;用行为类组合,而不是行为的继承
案例:
第一步,把行为抽象为接口
package top.littlepage.designPattern.Strategy; public interface FlyBehavior {
void fly();
}
第二步,把具体行为用实体类实现
package top.littlepage.designPattern.Strategy; public class BadFly implements FlyBehavior{ @Override
public void fly() {
System.out.println("--bad fly--");
} }
package top.littlepage.designPattern.Strategy; public class NotFly implements FlyBehavior{ @Override
public void fly() {
System.out.println("--not fly--");
} }
package top.littlepage.designPattern.Strategy; public class GoodFly implements FlyBehavior{ @Override
public void fly() {
System.out.println("--good fly--");
} }
第三步,做出具体的环境进行实现该实体
package top.littlepage.designPattern.Strategy; public class Bird {
private String name;
private int age;
private GoodFly goodfly;
private BadFly badfly;
private NotFly notfly; public Bird() {
name="";
age=;
goodfly=new GoodFly();
badfly=new BadFly();
notfly=new NotFly();
}
public GoodFly getGoodfly() {
return goodfly;
}
public void setGoodfly(GoodFly goodfly) {
this.goodfly = goodfly;
}
public BadFly getBadfly() {
return badfly;
}
public void setBadfly(BadFly badfly) {
this.badfly = badfly;
}
public NotFly getNotfly() {
return notfly;
}
public void setNotfly(NotFly notfly) {
this.notfly = notfly;
}
public Bird(String name, int age) {
this.name = name;
this.age = age;
goodfly=new GoodFly();
badfly=new BadFly();
notfly=new NotFly();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }
测试:
package top.littlepage.designPattern.Strategy; public class Test {
public static void main(String[] args) {
Bird b=new Bird("小鸟",);
System.out.print(b.getName());
b.getGoodfly().fly(); System.out.print(b.getName());
b.getBadfly().fly(); System.out.print(b.getName());
b.getNotfly().fly();
}
}
控制台截图
策略模式(strategy)利用接口进行抽象,利用实体进行实现抽象,再做出环境进行实现具体的实体
在我们面向对象后,经常利用这种设计模式进行编程,应该是比较简单的一种模式
设计模式(二)策略模式(Strategy)的更多相关文章
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...
- 二十四种设计模式:策略模式(Strategy Pattern)
策略模式(Strategy Pattern) 介绍定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例有一个Message实体类,对它的操作有 ...
- 反馈法学习设计模式(一)——策略模式Strategy Pattern
简介(Introduction) 之前学习Java8实战时,遇到一个很好的策略模式示例.便想着借着这个示例结合反馈式的方法来,学习策略设计模式,也以便后面反复琢磨学习. 首先我们通过练习,逐步写出符合 ...
- JAVA设计模式之策略模式 - Strategy
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 ...
- 8.6 GOF设计模式四: 策略模式… Strategy Pattern
策略模式… Strategy Pattern 在POS系统中,有时需要实行价格优惠, 该如何处理? 对普通客户或新客户报全价 对老客户统一折扣5% 对大客户统一折扣10% 注:课件 ...
- [设计模式] 21 策略模式 Strategy
在GOF的<设计模式:可复用面向对象软件的基础>一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.该模式使得算法可独立于使用它的客户而变化. 策略模 ...
- 大熊君说说JS与设计模式之------策略模式Strategy
一,总体概要 1,笔者浅谈 策略模式,又叫算法簇模式,就是定义了不同的算法,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 策略模式和工厂模式有一定的类似,策略模式相对简单容易理解,并 ...
- 设计模式之策略模式Strategy
/** * 策略设计模式 * 策略模式:定义一系列的算法族,使他们之间可以相互转换,动态的改变其行为. * 问题:设计一个鸭子模拟游戏. * 现在有一群鸭子: * ①这些鸭可以有飞的行为(分为快和慢) ...
- 大话设计模式之策略模式(strategy)
策略模式:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响使用算法的用户. 针对商城收银模式,打折,返现促销等的例子: 打折还是促销其实都是一些算法,可以用工厂模式来 ...
- 设计模式 笔记 策略模式 Strategy
//---------------------------15/04/28---------------------------- //Strategy 策略模式----对象行为型模式 /* 1:意图 ...
随机推荐
- 怎样从外网访问内网Redis数据库?
本地安装了一个Redis数据库,只能在局域网内访问到,怎样从外网也能访问到本地的Redis数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Redis数据库 默认安装的Redis ...
- lucene 全文检索工具的介绍
Lucene:全文检索工具:这是一种思想,使用的是C语言写出来的 1.Lucene就是apache下的一个全文检索工具,一堆的jar包,我们可以使用lucene做一个谷歌和百度一样的搜索引擎系统 2. ...
- Docker学习笔记之编写 Docker Compose 项目
0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...
- P2590 [ZJOI2008]树的统计(树链剖分)
P2590 [ZJOI2008]树的统计 虽然是入门树剖模板 但是我终于1A了(大哭) 懒得写啥了(逃 #include<iostream> #include<cstdio> ...
- Docker 配置
1. 网络 使用redsocks 需要配置 iptables -t nat -A PREROUTING -p tcp -j REDSOCKS 还需要使能 route_localnet # settin ...
- mvc 前端校验
首先解决 Ajax.BeginFor异步提交表单,给表单添加样式的问题.不能直接用class属性,网上找了很多都是用ClassName,经过测试不管用,看源代码发现生成的是ClassName而非cla ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem A - B
Array of integers is unimodal, if: it is strictly increasing in the beginning; after that it is cons ...
- python ---16 初识面向对象
面向对象 一 .面向对象和面向过程比较 ①面向过程:一切以事物的发展流程为核心 优点:负责的问题流程化,编写相对简单 缺点:可扩展性差 ②面向对象:一切以对象为中心. 一切皆为对象. 具体的某一 ...
- String的getBytes()方法 以及 new String()
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这表示在不同的操作系统下,返回的东西不一样! String.getBytes(Stringdecode) ...
- jsoup对 HTML 文档的解析和操作
本文手动转载自http://www.cnblogs.com/chenying99/archive/2013/01/04/2844615.html,仅根据个人需要对实用部分进行转载,详细请阅读原文. j ...