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

    策略模式

    百度百科定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

    组成:
    —抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
    —具体策略角色:包装了相关的算法和行为。
    —环境角色:持有一个策略类的引用,最终给客户端调用。
    优点:
    1、可以动态的改变对象的行为。
    2、使用策略模式可以避免使用多重条件转移语句。
    3、策略模式提供了可以替换继承关系的办法。
    缺点:
    1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
    2、策略模式造成很多的策略类,每个具体策略类都会产生一个新类。
    具体应用:
    简单一个例子:不同时期的人用不同的笔写字。
    类图:

    代码实现:

    public class Person {
        public Pen pen;
    
        public void setPen(Pen pen) {
            this.pen = pen;
        }
    
        public void doJob(){
            pen.write();
        }
    }
    public class Ancient extends Person {
        public Ancient() {
            pen = new Brush();
            System.out.println("古代人");
        }
    }
    public class Modern extends Person{
        public Modern() {
            pen = new Pencil();
            System.out.println("现代人");
        }
    }
    public interface Pen {
        void write();
    }
    public class Pencil implements Pen {
        @Override
        public void write() {
            System.out.println("用铅笔写字");
        }
    }
    public class Brush implements Pen {
        @Override
        public void write() {
            System.out.println("用毛笔写字");
        }
    }
    public class Test {
        public static void main(String[] args) {
            Person person = new Ancient();
            person.doJob();
            person.setPen(new Pencil());
            person.doJob();
        }
    }

    输出:

    以上就是策略模式,多种不同解决方案动态切换,起到改变对象行为的效果。
  • 相关阅读:
    磁盘分区,fdisk,gdisk,开机自动挂载,swap分区,修复文件系统,备份文件
    进程脱离窗口运行,僵尸、孤儿进程
    top命令、kill命令
    进程状态
    rpm包、挂载、yum命令
    DRF源码分析
    forms组件源码
    Django CBV源码分析
    魔法方法
    鸭子类型
  • 原文地址:https://www.cnblogs.com/foreverYoungCoder/p/7743343.html
Copyright © 2011-2022 走看看