策略模式类图和代码实例

在Duck类中我把它设计成了一个abstract类为的就是把Duck类中的共用方法也abstract出来,所有的继承Duck类都要实现这个abstract方法,另外还放入了两个接口,分另表示会飞和会叫的如:
public abstract class Duck {

FlyBehavior flyBehavior;

QuackBehavior quackBehavior;

public abstract void display();

public void performFly() {
flyBehavior.fly();
}

public void performQuack() {
quackBehavior.quack();
}

public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}

public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}

}

两个接口分别为:
public interface FlyBehavior {

public void fly();
}

public interface QuackBehavior {

public void quack();

}


public class FlyNoWay implements FlyBehavior{

public void fly() {
System.out.println("I can't flying");
}

}


public class FlyWithWings implements FlyBehavior{

public void fly() {
System.out.println("I can flying");
}

}


public class Quack implements QuackBehavior{

public void quack(){
System.out.println("Quack");
}

}

public class Squack implements QuackBehavior{

public void quack() {
System.out.println("Squack");
}

}

public class MuteQuack implements QuackBehavior{

public void quack(){
System.out.println("MuteQuack");
}
}

public class FlyRocketPowerd implements FlyBehavior{

public void fly(){
System.out.println("I'm flying with Rocket!");
}

}


public class MallerdDuck extends Duck{

public void display(){
System.out.println("I'm a real Mallar Duck");
}

public MallerdDuck(){
flyBehavior = new FlyWithWings();
quackBehavior = new MuteQuack();
}

}


public class ModelDuck extends Duck{

@Override
public void display() {
System.out.println("I'm a model duck");
}



public ModelDuck(){
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
}


public class Test {

public static void main(String[] args) {
Duck mallarDuck = new MallerdDuck();
mallarDuck.performFly();
mallarDuck.performQuack();

Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowerd());
model.performFly();

}

}
这样就可以通过为接口设置不同的实现类,从而达到动态调用的目的。设计原则多组合,少继承。


策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。


设计原则:
1. 找出程序中会变化的方面,然后将其和固定不变的地方相分离。2.针对接口编程,不针对实现编程。3.多用组合,少用继承。4.类应该对扩展开放,对修改关闭。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
策略模式和适配器模式是常用的设计模式,它们可以在软件开发中提供灵活性和可扩展性。下面是策略模式和适配器模式的代码实例策略模式策略模式定义了一系列算法,并将每个算法封装成独立的类,使它们可以互相替换。以下是一个简单的策略模式代码示例: ```python # 定义策略接口 class Strategy: def do_operation(self, num1, num2): pass # 实现具体策略类 class OperationAdd(Strategy): def do_operation(self, num1, num2): return num1 + num2 class OperationSubtract(Strategy): def do_operation(self, num1, num2): return num1 - num2 class OperationMultiply(Strategy): def do_operation(self, num1, num2): return num1 * num2 # 定义上下文类 class Context: def __init__(self, strategy): self.strategy = strategy def execute_strategy(self, num1, num2): return self.strategy.do_operation(num1, num2) # 使用示例 context = Context(OperationAdd()) result = context.execute_strategy(10, 5) print(result) # 输出:15 context = Context(OperationSubtract()) result = context.execute_strategy(10, 5) print(result) # 输出:5 ``` 适配器模式: 适配器模式用于将一个类的接口转换成客户端所期望的另一个接口。以下是一个简单的适配器模式代码示例: ```python # 定义目标接口 class Target: def request(self): pass # 实现适配者类 class Adaptee: def specific_request(self): print("适配者的特殊请求") # 实现适配器类 class Adapter(Target): def __init__(self, adaptee): self.adaptee = adaptee def request(self): self.adaptee.specific_request() # 使用示例 adaptee = Adaptee() adapter = Adapter(adaptee) adapter.request() # 输出:适配者的特殊请求 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值