zoukankan      html  css  js  c++  java
  • 设计模式一:策略模式

    目的:提高代码的复用性,拓展性,降低代码间的耦合度。

    示例:就以鸭子举例

    1.将类之间的共性定义在父类之中。

    鸭子都会游泳

    public abstract class Duck {
        public void swim(){
            System.out.println("游泳!");
        }
    }
    

      

    2.将子类一定有的功能(不同子类实现方式不一样)写成抽象方法在父类中。

    不同鸭子颜色不一样

    public abstract class Duck {
        public void swim(){
            System.out.println("游泳!");
        }
        abstract void showColor();
    }

    3.将子类不一定有的方法单独写成接口。

    比如不是所有鸭子都会飞(比喻不太恰当,理解含义就行)

    public interface QuackBehavior {
        void quack();
    }
    public interface JumpBehavior {
        void jump();
    }
    

      

    4.将步骤3中的接口作为成员属性放在父类中。

    数据摆放顺序是按照步骤摆的,为了方便理解,实际读者在写代码的时候不要写这种顺序。

    public abstract class Duck {
        public void swim(){
            System.out.println("游泳!");
        }
        abstract void showColor();
    
        FlyBehavior flyBehavior;
        JumpBehavior jumpBehavior;
    
        public void performFly(){
            flyBehavior.fly();
        }
        public void performJump(){
            jumpBehavior.jump();
        }
    }
    

      

      

    5.针对独立出来的接口写具体的实现类。

    public class FlyWithWing implements FlyBehavior {
        public void fly() {
            System.out.println("用翅膀飞!");
        }
    }
    public class JumpWithOneLeg implements JumpBehavior {
        public void jump() {
            System.out.println("用一只脚跳!");
        }
    }
    

      

      

    6.创建我们需要的具体实现类,继承父类,在构造函数中指定需要功能的具体实例,实现特色功能。

    public class RedDuck extends Duck{
        public RedDuck(){
            flyBehavior = new FlyWithWing();
         jumpBehavior = new JumpWithOneLeg(); } public void showColor() { System.out.println("red!"); } }

    7.测试demo

    public class Test {
        public static void main(String...args){
            Duck duck = new RedDuck();
            duck.performFly();
    duck.performJump(); duck.swim(); ((RedDuck) duck).showColor(); } }

    1.假设现在我们多了一个鸡的对象,可以直接将飞和跳的能力用上,因为这些行为是与鸭子解耦的。增加了代码的复用性。

    2.假设现在多了一种行为,鸡会唱歌,那么我们完全可以写一个唱歌的行为,不会对目前已有的鸭子对象造成影响。

    END

  • 相关阅读:
    Douglas-Peucker 轨迹压缩算法
    Marching squares 算法 获取轮廓(contour tracing)
    创建Mesh->格子地图转NavMesh->可破坏墙壁
    StretchedBillboard 实现
    程序员的微创业
    买云服务器有推荐吗?国内知道有腾讯云、阿里云...等等,不知道该选哪个好了,另外优惠吗?
    我的阿里云5年
    2021阿里云、腾讯云、华为云、滴滴云评测比较
    终于找到可以一文多发的平台了!
    2019年最新阿里云主机优惠购买指南
  • 原文地址:https://www.cnblogs.com/indecy/p/10568886.html
Copyright © 2011-2022 走看看