您的位置:首页 > 其它

接口应用——策略模式

2016-01-26 00:00 302 查看
策略模式(Strategy Pattern),定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化。

OO设计原则:

面向接口编程(面向抽象编程)

封装变化

多用组合,少用继承

package com.main;

//策略设计模式
public class StrategyPattern {

public static void main(String[] args) {
Duck trueDuck = new TrueDuck("真鸭子");
trueDuck.setSwim(new SwimImpl());// 设置游泳的具体实现
trueDuck.swim();
System.out.println("--------------");
Duck modelDuck = new ModelDuck("模型鸭子");
modelDuck.setSwim(new NotSwimImpl());// 设置游泳的具体实现
modelDuck.swim();
}

}

// 是否会游泳的接口(将游泳这一种能力抽象出来)
interface Swimable {
public void swim();
}

// Swimable接口的实现类1
class SwimImpl implements Swimable {

@Override
public void swim() {
System.out.println("会游泳");
}
}

// Swimable接口的实现类2
class NotSwimImpl implements Swimable {

@Override
public void swim() {
System.out.println("不会游泳");
}
}

class Duck {
private String name;
// 只说明有游泳这个属性,并不去确定是否会游泳
private Swimable swim;

public void setSwim(Swimable swim) {
this.swim = swim;
}

public Duck(String name) {
this.name = name;
}

public void swim() {
System.out.print("我是" + name + ",");
swim.swim();
}

}

// 真鸭子具体类
class TrueDuck extends Duck {

public TrueDuck(String name) {
super(name);
}
}

// 模型鸭子具体类
class ModelDuck extends Duck {

public ModelDuck(String name) {
super(name);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: