美文网首页Java程序员技术干货
Java 设计模式(1) —— 策略模式

Java 设计模式(1) —— 策略模式

作者: 磊_lei | 来源:发表于2018-05-03 23:21 被阅读89次
  1. 设计模式是人们在面对同类型软件工程设计问题所总结出的一些有用的经验。模式不是代码,而是某类问题的通用设计解决方案。
  2. 设计模式的本质目的是使软件工程在维护性、扩展性、变化性、复杂度方面成O(N)
  3. OO是原则,设计模式是具体的方法、工具
策略模式

一、策略模式

介绍:

    分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。原则就是:分离变化部分,封装接口,基于接口变成各种功能。此模式让行为算法的变化独立于算法的使用者

二、示例

  • 模拟鸭子项目,鸭子会嘎嘎叫,会游泳,有不同的颜色

1.传统模式

从面向对象的角度设计,封装鸭子的超类,扩展超类

public abstract class Duck {

    public void Quack() { 
        System.out.println("~~gaga~~");
    }
    public abstract void display(); 
    public void swim() {
        System.out.println("~~im swim~~"); }
}

1、GreenHeadDuck继承Duck :

public class GreenHeadDuck extends Duck {

    @Override
    public void display() {
        System.out.println("**GreenHead**"); 
    }
} 

2、同理可有RedHeadDuck等集成Duck的父类

新增需求 —— 鸭子会飞
OO思维里的继承方式解决方案是:

public abstract class Duck { 
    ...;
    public void Fly() {
        System.out.println("~~im fly~~"); 
    }
};

问题来了,这个Fly让所有子类都会飞了,这是不科学的,并不是所有的鸭子都会飞,且会飞的也飞的有快有慢。

继承的问题:对类的局部改动,尤其超类的局部改动,会影响其他部分。影响会有溢出效应。

因此只能通过子类中一个个去覆盖解决,较繁琐。

2.使用策略模式后

1、接口:

// 飞行行为接口
public interface FlyBehavior {
    void fly();
}

// 嘎嘎叫行为接口
public interface QuackBehavior {
    void quack();
}

2、好处:新增行为简单,行为类更好的复用,组合更方便。又有继承带来的复用好处

重新设计的鸭子项目:

public abstract class Duck { 
    FlyBehavior mFlyBehavior; 
    QuackBehavior mQuackBehavior;

    public Duck(){ 
    }

    public void Fly() { 
        mFlyBehavior.fly();
    }

    public void Quack() {
        mQuackBehavior.quack(); 
    }

    public abstract void display(); 
}
public class GreenHeadDuck extends Duck {

    public GreenHeadDuck() {
        mFlyBehavior = new GoodFlyBehavior();
        mQuackBehavior = new GaGaQuackBehavior();
    }

    @Override
    public void display() {...}
}

三、总结

  • 应对项目的拓展性,降低复杂度,分析项目变化与不变部分
  • 提取变化部分,抽象成接口+实现
  • 使得新增行为简单,行为类更好的复用,组合更方便,又有继承带来的复用好处

Java设计模式所有示例代码,持续更新中

相关文章

  • 策略模式

    本文参考自: 《JAVA设计模式》之策略模式(Strategy) 1. 作用 策略模式属于对象的行为模式。其用意是...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • Java 常用设计模式简例

    简述Java常用设计模式 简述Java常用设计模式及设计原则 strate---------策略模式针对接口编程,...

  • 策略模式

    参考资料:漫话:如何给女朋友解释什么是策略模式? 设计模式之策略模式(实例+Demo) Java设计模式(8)——...

网友评论

    本文标题:Java 设计模式(1) —— 策略模式

    本文链接:https://www.haomeiwen.com/subject/tsfrrftx.html