基于java的设计模式(1)------策略模式
来源:互联网 发布:淘宝买家差评如何修改 编辑:程序博客网 时间:2024/09/21 06:33
文章只是自己在极客学院学习设计模式过程中的一些笔记,便于以后查看
背景:
在面向对象编程中,使用继承时扩展性问题,如果某个对象的方法增加,在超类添加方法,则其下的子类都继承了这个方法,影响范围太大,出现溢出效应。超类挖的一个坑,每个子类都要来填,增加工作量,复杂度O(N^2)。不是好的设计方式
解决:
使用策略模式,抽出变化的部分,抽象成接口+实现,就可以在超类里放行为接口对象,在子类里具体设 定行为对象
原则就是:分离变化部分,封装接口,基于接口编程各种功能。这个模式让行为算法的变化独立于算法的使用。
给出demo:
package duck;import strategy_pattern.behavior.FlyBehavior;import strategy_pattern.behavior.QuackBehavior;public abstract class duck {FlyBehavior flyBehavior;QuackBehavior quackBehavior;public duck() {}public void Fly() {flyBehavior.fly();}public void Quack() {quackBehavior.quack();}public abstract void display();public void swim() {System.out.println("~~im swim~~");}public void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior = flyBehavior;}public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior = quackBehavior;}}
package duck;import strategy_pattern.behavior_detial.GaGaQuackBehavior;import strategy_pattern.behavior_detial.GodeFlyBehavior;public class GreenDuck extends duck {public GreenDuck() {flyBehavior=new GodeFlyBehavior();quackBehavior=new GaGaQuackBehavior();}@Overridepublic void display() {System.out.println("-------greenDuck-----");}}
package duck;import strategy_pattern.behavior_detial.badFlyBehavior;import strategy_pattern.behavior_detial.noQuackBehavior;public class RedDuck extends duck {public RedDuck() {flyBehavior=new badFlyBehavior();quackBehavior=new noQuackBehavior();}@Overridepublic void display() {System.out.println("-------redDuck-----");}}
package strategy_pattern.behavior;public interface FlyBehavior {void fly();}
package strategy_pattern.behavior;publicinterface QuackBehavior {void quack();};
public class badFlyBehavior implements FlyBehavior {@Overridepublic void fly() {System.out.println("bad fly");}}
public class GaGaQuackBehavior implements QuackBehavior {@Overridepublic void quack() {System.out.println(" GAGA");}}
public class GodeFlyBehavior implements FlyBehavior{@Overridepublic void fly() {System.out.println("good fly");}}
public class noQuackBehavior implements QuackBehavior {@Overridepublic void quack() {System.out.println("no quack");}}
package test;import duck.GreenDuck;import duck.RedDuck;import duck.duck;import strategy_pattern.behavior_detial.GodeFlyBehavior;import strategy_pattern.behavior_detial.noQuackBehavior;public class test {public static void main(String[] args) {duck greenDuck = new GreenDuck();duck redDuck = new RedDuck();greenDuck.display();greenDuck.Fly();greenDuck.Quack();greenDuck.swim();redDuck.display();redDuck.Fly();redDuck.Quack();redDuck.swim();redDuck.display();redDuck.setFlyBehavior(new GodeFlyBehavior());redDuck.Fly();redDuck.setQuackBehavior(new noQuackBehavior());redDuck.Quack();}}
-------greenDuck-----
good fly
GAGA
~~im swim~~
-------redDuck-----
bad fly
no quack
~~im swim~~
-------redDuck-----
good fly
no quack
希望对一些朋友有所帮助,如果需要详细的讲解,那得到它的出处了。
阅读全文
0 0
- 基于java的设计模式(1)------策略模式
- 基于Java的设计模式(1)
- 我的Java设计模式-策略模式
- Java技术常用的设计模式(一)--- 策略模式
- java设计模式(1)---策略模式
- Java 设计模式 (1) 策略模式
- java 设计模式------1、策略模式
- Java设计模式1:策略模式
- java 设计模式--策略模式(strategy)
- Java设计模式(四)策略模式
- 设计模式之策略模式(java)
- Java设计模式(一) 策略模式
- Java设计模式----策略模式(Strategy)
- java设计模式(五)--策略模式
- Java设计模式(十二) 策略模式
- java设计模式(2)策略模式
- Java设计模式( 策略模式)
- java设计模式:(策略模式)
- 【java练习】扑克牌类的创建、洗牌
- ns2 常用网站
- [python]关于迷宫问题与递归调用的一些tips
- Ionic3 项目架构
- 基于TensorFlow的机器学习(2) -- 回归模型
- 基于java的设计模式(1)------策略模式
- 组合模式(Composite Pattern)——管理良好的集合
- Java并发性和多线程介绍、优缺点
- Java基础部分总结
- 导入Liferay项目
- Linkit ONE开发板实验03-串口打印GPS数据
- 20171022java学习iterator java 迭代遍历
- 网络通信模型之BIO与NIO、AIO的区别
- 打开安卓项目报错Failed to load E:\android\android-sdk-windows\build-tools\26.0.2\lib\dx.ja Unable to build: