• 设计模式真香笔记-策略模式


    策略模式的定义

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

    利用到的设计模式原则

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

    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 设计模式》

  • 相关阅读:
    java三大特性或java对象的三大特性?
    数据结构与算法第10周作业——二叉树的创建和遍历算法
    JDBC的应用
    数据结构与算法--第5周作业(线性表合并算法)
    数据结构与算法--第4周作业(单链表)
    WEB(JSP)下的JDBC操作实验
    application下的JDBC操作
    思考题:JSP的指令inclue和动作include的区别
    css3动画小试
    JS => 函数
  • 原文地址:https://www.cnblogs.com/narojay/p/10812600.html
Copyright © 2020-2023  润新知