设计模式一:策略模式
来源:互联网 发布:路由访客网络什么意思 编辑:程序博客网 时间:2024/06/09 22:19
一.策略模式中用到的设计原则
1.找出代码中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起.
2.针对接口编程,而不是实现编程
二.策略模式
1.概念
定义了算法族,分别分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
2.为什么使用策略模式
如果现在有一个超类Duck(鸭子),该鸭子有飞,叫等行为,现在我们要实现两个子类,这两个子类也要有飞,叫等行为,那我们直接继承此超类Duck即可,但现在需要一个会呱呱叫或者嘎嘎叫的子类,总之和超叫的行为有差异,那我们可以在写一个子类,重写其超类的叫方法,如果还有其它的变化,那么要写很多的子类,非常麻烦。
下面我们使用策略模式来解决
策略模式把其变化的部分和不变的部分分开,上述代码中变化的部分是鸭子的行为,所以我们把鸭子的行为提出来,用接口和实现类的方式来表示。
三.代码
超类:
public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public Duck(){ flyBehavior = new FlyNoWay(); quackBehavior= new Quack(); } public void performFly(){ flyBehavior.fly(); } public void performQuack(){ quackBehavior.quack(); }public FlyBehavior getFlyBehavior() {return flyBehavior;}public void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior = flyBehavior;}public QuackBehavior getQuackBehavior() {return quackBehavior;}public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior = quackBehavior;} }
飞行为接口:
public interface FlyBehavior {public void fly();}
叫行为接口:
public interface QuackBehavior { public void quack();}
飞行为两个实现类:
public class FlyNoWay implements FlyBehavior {@Overridepublic void fly() {// TODO Auto-generated method stub System.out.println("I can't fly");}}
public class FlyWithWings implements FlyBehavior {@Overridepublic void fly() {// TODO Auto-generated method stub System.out.println("I'm fly");}}
叫行为两个实现类:
public class MuteQuack implements QuackBehavior {@Overridepublic void quack() {// TODO Auto-generated method stub System.out.println("Mute Quack");}}
public class Quack implements QuackBehavior {@Overridepublic void quack() {// TODO Auto-generated method stub System.out.println("quack");}}
子类:
public class MinaDuck extends Duck { public static void main(String[] args) {//默认的行为 MinaDuck minaDuck= new MinaDuck(); minaDuck.performFly(); minaDuck.performQuack(); //当行为改变时,不需要其重新继承Duck,生成其子类,只要其设置不同的行为即可 FlyBehavior flyBehavior = new FlyWithWings(); minaDuck.setFlyBehavior(flyBehavior); minaDuck.performFly();}}
0 0
- 设计模式一 策略模式
- 设计模式(一) 策略模式
- 设计模式一:策略模式
- 设计模式(一)Strategy - 策略模式
- 设计模式(一)策略模式
- Java设计模式(一) 策略模式
- java设计模式一策略模式
- 设计模式一之策略模式(strategy)
- 设计模式之策略模式(一)
- 设计模式一之策略模式
- 设计模式----策略模式(一)
- 设计模式----策略模式(一)
- 设计模式(一)之策略模式
- 设计模式 一一一 策略模式
- 设计模式一之策略模式
- 浅谈设计模式(一)策略模式
- Head_First设计模式(一)----策略模式
- 设计模式学习笔记(一):策略模式
- Android Okhttp3和Gson框架简单使用
- java中的泛型
- Tomcat服务器配置https双向认证(使用keytool生成证书)
- 题目1431:Sort
- 计算机视觉-人脸渐变
- 设计模式一:策略模式
- Python爬虫抓取携程网机票信息并发邮件通知
- bzoj4540 序列
- 题目1432:叠筐
- 诗一首
- Mysql的安装(linux下)
- Y2K Accounting Bug POJ
- python中*args **kw到底是什么意思?
- 04-树4 是否同一棵二叉搜索树 (25分)