设计模式之策略模式

本文详细介绍了策略模式在模拟鸭子应用中的应用,通过实例展示了如何从简单的鸭子模型逐步改进到采用策略模式,以解决代码重复、运行时行为不易改变等问题。策略模式遵循面向接口编程、多用组合少用继承等设计原则,使得鸭子的行为可以通过不同的策略类灵活组合,实现了代码的可扩展性和重用性。
摘要由CSDN通过智能技术生成

 

策略模式

目录

策略模式

一、从简单的模拟鸭子应用开始

二、改进版的鸭子应用

三、采用策略模式改进后的鸭子应用

3.1 策略模式中包含的设计原则

3.2 具体的方法

四、总结


一、从简单的模拟鸭子应用开始

Joe上班的公司做了一套模拟鸭子的游戏:SimUDuck。游戏中的各种鸭子一边游泳戏水,一边呱呱叫。此系统内部设计使用了标准的OO技术,设计了一个鸭子超累,并且让各种鸭子继承此超类。

              

public abstract class Duck {     //抽象类

	public Duck() {
	}

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

	public abstract void display();    //抽象方法,每个子类都必须实现该方法

	public void swim() {
		System.out.println("~~im swim~~");
	}
	
	
	public void Fly() {    //添加一个fly()方法
			System.out.println("~~im fly~~");
		}
	
	
public class RedHeadDuck extends Duck {

	@Override
	public void display() {
		System.out.println("**RedHead**");
	}

此时项目中需要添加新的功能,比说要程序中需要有会飞的鸭子,此时Joe在Duck类上添加了fly方法,这种方法有个弊端,所有的子类都会包含有fly方法,并非所有的duck类的子类都会飞。

Joe想到一个方法:用覆盖的方式把不会飞的子类中fly方法覆盖掉


public class GreenHeadDuck extends Duck {
    //不会飞的鸭子

	@Override
	public void display() {
		System.out.println("**GreenHead**");
	}

	public void Fly() {    //覆盖
		System.out.println("~~no fly~~");
	}
	
	
	
}

用继承的方式来提供Duck的行为,会导致以下缺点:

1.代码会在多个子类中重复

2.运行时的行为不容易改变

3.无法得知所有鸭子的全部行为,并且鸭子不能够同时飞又叫

4.改变Duck类代码,会影响其他鸭子一起发生改变

二、改进版的鸭子应用

Joe把fly方法抽取出来,放进一个flyable接口中,这样一来,只有会飞的鸭子才实现此接口。同样的他也可以设计一个Quackable接口,并不是所有的鸭子都会叫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值