设计模式--策略模式Strategy

定义:

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

实现:

UML图


代码:

Duck.java

package com.zjm.duck;

import com.zjm.fly.FlyBehavior;
import com.zjm.quack.QuackBehavior;

public abstract class Duck {
	FlyBehavior mFly;
	QuackBehavior mQuack;

	public void swim() {
	};

	public abstract void display();

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

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

MallerdDuck.java

package com.zjm.duck;

import com.zjm.fly.FlyWithWings;
import com.zjm.quack.Quack;

public class MallerdDuck extends Duck {
	public MallerdDuck() {
		mFly = new FlyWithWings();
		mQuack = new Quack();
	}

	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("MallerdDuck");
	}
}

RedHead.java

package com.zjm.duck;

import com.zjm.fly.FlyWithWings;
import com.zjm.quack.Squeak;

public class RedHeadDock extends Duck {
	public ReaHeadDock() {
		mFly = new FlyWithWings();
		mQuack = new Squeak();
	}

	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("RedHeadDock");
	}

}
RubberDuck.java
package com.zjm.duck;

import com.zjm.fly.FlyNoWay;
import com.zjm.quack.MuteQuack;

public class RubberDuck extends Duck {
	public RubberDuck() {
		mFly = new FlyNoWay();
		mQuack = new MuteQuack();
	}

	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("RubberDuck");
	}
}

FlyBehavior.java

package com.zjm.fly;

public interface FlyBehavior {
	public void fly();
}
FlyNoWay.java

package com.zjm.fly;

public class FlyNoWay implements FlyBehavior {

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println(" I  can't fly!");
	}

}
...

其余代码见链接1

第二个小例子:



代码链接2

OO基础

  抽象

  封装

  多态

  继承

OO原则

  封装变化

  多用组合,少用继承

  针对接口编程,不针对实现编程

OO设计必须具备可复用、可扩充、可维护三个特性

设计原则:

    找出应用中可能需要变化之处,把它们独立出来,不需要和那些不变化的代码混在一起,

    针对接口编程,而不是针对实现编程。

    多用组合,少用继承

要点:

    模式不是代码,而是针对设计问题的通用解决方案,你可以把它们应用到特定的应用中。

    大多数模式和原则,都着眼于软件变化的主题,都允许系统局部改变独立于其他部分。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值