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

  • 相关阅读:
    pspc命令使用(转)
    NSArray数组的使用常用方法(转)
    css兼容的问题 持续更新
    关于memcache
    drupal7 学习笔记(持续更新中...)
    JavaScript的继承 转载
    浏览器的缓存机制
    我的js单例模式
    javascript运行机制
    javascrpt绑定事件之匿名函数
  • 原文地址:https://www.cnblogs.com/indecy/p/10568886.html
Copyright © 2011-2022 走看看