zoukankan      html  css  js  c++  java
  • 设计模式真香笔记-策略模式

    策略模式的定义

    定义了一系列算法,分别封装起来,让它们之间可以互相替换,让算法的变化独立于使用他们的客户

    利用到的设计模式原则

    • 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
    • 针对接口编程,而不是针对实现编程
    • 多用组合少用继承

    UML类图
    鸭子论
    实现代码

    • Duck.java (鸭子抽象类)
    package duck;
    
    /**
     * 鸭子论之实现
     *
     * @author hjsjy
     * @create 2018/10/9
     * @since 1.0.0
     */
    public abstract class Duck {
        Flybehavior flybehavior;
        Quackbehavior quackbehavior;
    
        public void setQuackbehavior(Quackbehavior quackbehavior) {
            this.quackbehavior = quackbehavior;
        }
    
        public void setFlybehavior(Flybehavior flybehavior) {
            this.flybehavior = flybehavior;
        }
        public void PeformFly(){
            flybehavior.fly();
        }
        public void PerformQuack(){
            quackbehavior.quack();
        }
        public void swim(){
            System.out.println("我可以游泳!");
        }
        public abstract  void display();
    }
    
    
    • Flybehavior.java (飞行行为接口)
    public interface Flybehavior {
        void fly();
    }
    
    • 飞行行为接口实现
    public class FlyNoWay implements Flybehavior {
    
        @Override
        public void fly() {
            System.out.println("不能飞!!!!!!");
        }
    }
    
    • 飞行行为接口实现
     */
    public class FlyOnSky implements Flybehavior {
    
        @Override
        public void fly() {
            System.out.println("在天上飞!!!!!!!");
        }
    }
    
    • Quackbehavior.java (鸭叫行为接口)
    public interface Quackbehavior {
         void quack();
    }
    
    
    • AQuack.java(鸭叫行为实现)
    public class AQuack implements Quackbehavior {
    
        @Override
        public void quack() {
            System.out.println("嘎嘎嘎!!!!!!!!!");
        }
    }
    
    • NoQuack(鸭叫行为实现)
    public class NoQuack implements Quackbehavior {
    
        @Override
        public void quack() {
            System.out.println("没有声音!!!!!!!!");
        }
    }
    
    • HjsjyDuck.java(实现鸭子抽象类)
    public class HjsjyDuck extends  Duck {
        public HjsjyDuck(){
            flybehavior=new FlyOnSky();
            quackbehavior=new AQuack();
        }
        @Override
        public void display() {
            System.out.println("我是一直会游泳,会飞并且会嘎嘎嘎的鸭子!!!!!!!!!");
        }
    }
    
    • DuckTest.java(鸭子测试类)
    public class DuckTest {
        public static void main(String[] args) {
            Duck hjsjyDuck = new HjsjyDuck();
            hjsjyDuck.display();
            hjsjyDuck.swim();
            hjsjyDuck.PeformFly();
            hjsjyDuck.PerformQuack();
            hjsjyDuck.setFlybehavior(new FlyNoWay());
            hjsjyDuck.PeformFly();
        }
    }
    

    输出结果
    输出结果


    本文参考 :《Head First 设计模式》

  • 相关阅读:
    陶瓷电容的结构、工艺、失效模式
    Vue.js最佳实践
    Vue 超快速学习
    CSS 小技巧
    HTML5 Canvas
    webkit下面的CSS设置滚动条
    Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them
    JSCS: Please specify path to 'JSCS' package
    React中ref的使用方法
    React 60S倒计时
  • 原文地址:https://www.cnblogs.com/narojay/p/10812600.html
Copyright © 2011-2022 走看看