美文网首页
策略模式

策略模式

作者: keith666 | 来源:发表于2016-05-15 15:46 被阅读4次

    Intent

    1. Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it.
    2. Capture the abstraction in an interface, bury implementation details in derived classes.

    结构图

    duck by keith

    代码实现:

    //behavior interface
    interface QuackBehavior {
        void quack();
    }
    //quack
    class Quack implements QuackBehavior {
        @Override
        public void quack() {
            System.out.println("Quack");
        }
    }
    // muteQuack
    class MuteQuack implements QuackBehavior {
        @Override
        public void quack() {
            System.out.println("Silence");
        }
    }
    //Squeak
    class Squeak implements QuackBehavior {
    
        @Override
        public void quack() {
            System.out.println("Squeak");
        }
    }
    //client
    abstract class Duck {
        private QuackBehavior quackBehavior;
        public Duck() {
        }
        abstract void display();
        public void performQuack() {
            quackBehavior.quack();
        }
    
        public void setQuackBehavior(QuackBehavior quackBehavior) {
            this.quackBehavior = quackBehavior;
        }
    }
    //ModelDuck
    class ModelDuck extends Duck {
        @Override
        void display() {
            System.out.println("I am a model duck.");
        }
    }
    //test
    public class Strategy {
        public static void main(String[] args) {
            Duck duck = new ModelDuck();
            //对方法的抽象(也就是algorithm)之后,可以独立的按需调用相应的实现,更加灵活。
            duck.setQuackBehavior(new Quack());
            duck.performQuack();
        }
    }
    

    Reference:

    1. Design Patterns
    2. 设计模式

    相关文章

      网友评论

          本文标题:策略模式

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