美文网首页
设计模式用例(三)

设计模式用例(三)

作者: 月巴月巴 | 来源:发表于2018-12-31 12:28 被阅读0次
  1. Strategy 模式
interface Evaluator {
    void eval(Candidate candidate);
}

class Candidate {
    private double techLevel;
    private double behaviorLevel;
    private double managingSkill;
    private Evaluator evaluator;

    public void setEvaluator(Evaluator evaluator) {
        this.evaluator = evaluator;
    }

    public Candidate(double techLevel, double behaviorLevel, double managingSkill) {
        this.techLevel = techLevel;
        this.behaviorLevel = behaviorLevel;
        this.managingSkill = managingSkill;
    }

    public double getTechLevel() {
        return techLevel;
    }

    public double getBehaviorLevel() {
        return behaviorLevel;
    }

    public double getManagingSkill() {
        return managingSkill;
    }

    public void evaluate() {
        if (evaluator == null) {
            evaluator = new TechValue();
        }
        evaluator.eval(this);
    }
}

class TechValue implements Evaluator {
    public void eval(Candidate candidate) {
        System.out.println("Tech value: " + (candidate.getTechLevel() * 0.8 + candidate.getBehaviorLevel() * 0.2));
    }
}

class ManagerValue implements Evaluator {
    public void eval(Candidate candidate) {
        System.out.println("Manage value: " + (candidate.getManagingSkill() * 0.6 + candidate.getBehaviorLevel() * 0.4));
    }
}

public class StrategyStudy {
    public static void main(String[] args) {
        Candidate engineer = new Candidate(80, 80, 50);
        engineer.setEvaluator(new TechValue());
        engineer.evaluate();

        engineer.setEvaluator(new ManagerValue());
        engineer.evaluate();
    }
}
//output:
//Tech value: 80.0
//Manage value: 62.0


  1. Bridge 模式
public interface GameDevice {
    void pressBtn();
}

public interface Joystick {
    void press();
}

public class Computer implements GameDevice {
    private Joystick joystick;

    public Computer(Joystick joystick) {
        this.joystick = joystick;
    }

    @Override
    public void pressBtn() {
        System.out.println("Play Computer");
        joystick.press();
    }

    public void setJoystick(Joystick joystick) {
        this.joystick = joystick;
    }
}

public class XBox implements GameDevice {
    private Joystick joystick;

    public XBox(Joystick joystick) {
        this.joystick = joystick;
    }

    @Override
    public void pressBtn() {
        System.out.println("Play Xbox");
        joystick.press();
    }

    public void setJoystick(Joystick joystick) {
        this.joystick = joystick;
    }
}

public class LogiTechStick implements Joystick{
    @Override
    public void press() {
        System.out.println("Press Logi Tech joy stick");
    }
}

public class XBox360Stick implements Joystick {
    @Override
    public void press() {
        System.out.println("Press xbox 360 joy stick");
    }
}

public class XBoxOneStick implements Joystick {
    @Override
    public void press() {
        System.out.println("Press xbox One joy stick");
    }
}

public class BridgeStudy {
    public static void main(String[] args) {
        // change joystick implementation, no code change needed in GameDevice
        XBox xbox = new XBox(new XBoxOneStick());
        xbox.pressBtn();
        xbox.setJoystick(new XBox360Stick());
        xbox.pressBtn();
        // change game device implementation  no code change needed in JoyStick
        Computer computer = new Computer(new XBoxOneStick());
        computer.pressBtn();
        computer.setJoystick(new LogiTechStick());
        computer.pressBtn();
    }
}/// output
//Play Xbox
//Press xbox One joy stick
//Play Xbox
//Press xbox 360 joy stick
//Play Computer
//Press xbox One joy stick
//Play Computer
//Press Logi Tech joy stick

  1. Iterator 模式
class Score {
    private char[] notes = {'C', 'D', 'E', 'F', 'G', 'A', 'B'};
    ScoreIterator iterator() {
        return new ScoreIterator(this);
    }

    public char[] getNotes() {
        return notes;
    }
}

class ScoreIterator {
    private Score score;
    private int p = -1;
    ScoreIterator(Score score) {
        this.score = score;
    }

    char next() {
        if (hasNext()) {
            return score.getNotes()[++p];
        } else {
            throw new RuntimeException("out of bound");
        }
    }

    boolean hasNext() {
        return p < score.getNotes().length - 1;
    }

    void reset() {
        p = -1;
    }
}

public class IteratorPattern {
    public static void main(String[] args) {
        Score score = new Score();
        ScoreIterator iterator = score.iterator();
        while(iterator.hasNext()) {
            System.out.print(iterator.next());
        }
    }
}
// output
// CDEFGAB

相关文章

  • 设计模式用例(三)

    Strategy 模式 Bridge 模式 Iterator 模式

  • 开发之设计模式-单例模式

    设计模式 设计模式分为三大类:创建型、结构型、行为型在Java中有24中设计模式 创建型:单例 1、为什么用单例模...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 单例模式

    单例 单例模式,是一种设计模式,属于创建型设计模式,还有一种创建型设计模式,工厂模式。设计模式总共有23种,三大类...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式(Swift) - 3.观察者模式、建造者模式

    上一篇 设计模式(Swift) - 2.单例模式、备忘录模式和策略模式中讲了三种常见的设计模式. 单例模式: 限制...

网友评论

      本文标题:设计模式用例(三)

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