设计模式学习----策略模式
2009-12-30 13:44
501 查看
【策略模式解释】
类型:行为模式
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
UML图如下:
新建一个轮胎接口:
package strategy_interface;
public interface tyre_interface {
// tyre 轮胎
public void print_tyre_line();// 显示出轮胎的痕迹
}
新建2个轮胎接口的实现类:
package strategy_implement;
import strategy_interface.tyre_interface;
//长痕迹轮胎类
public class tyre_long_implement implements tyre_interface {
public void print_tyre_line() {
System.out.println("在路面上显示一个长轮胎痕迹");
}
}
package strategy_implement;
import strategy_interface.tyre_interface;
//短痕迹轮胎类
public class tyre_short_implement implements tyre_interface {
public void print_tyre_line() {
System.out.println("在路面上显示一个短轮胎痕迹");
}
}
组装一个Car车类:
package car_package;
import strategy_interface.tyre_interface;
public class Car {
private String make_address;// 制造地
private int death_year;// 报废年限
private int speed;// 速度
private tyre_interface tyre_interface_ref;// 轮胎的样式
public String getMake_address() {
return make_address;
}
public void setMake_address(String make_address) {
this.make_address = make_address;
}
public int getDeath_year() {
return death_year;
}
public void setDeath_year(int death_year) {
this.death_year = death_year;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public tyre_interface getTyre_interface_ref() {
return tyre_interface_ref;
}
public void setTyre_interface_ref(tyre_interface tyre_interface_ref) {
this.tyre_interface_ref = tyre_interface_ref;
}
public void start() {
System.out.println("车的基本信息为:");
System.out.println("制造地make_address:" + this.getMake_address());
System.out.println("报废年限death_year:" + this.getDeath_year());
System.out.println("速度speed:" + this.getSpeed());
System.out.println("Car 起动了!");
System.out.println("Car高速行驶,遇到一个大转弯,路面显示:");
this.getTyre_interface_ref().print_tyre_line();
}
}
让车跑起来,并且具有更换轮胎样式的功能:
package main_run;
import strategy_implement.tyre_long_implement;
import strategy_implement.tyre_short_implement;
import car_package.Car;
public class run_main {
public static void main(String[] args) {
tyre_long_implement tyre_long_implement = new tyre_long_implement();
tyre_short_implement tyre_short_implement = new tyre_short_implement();
Car car = new Car();
car.setDeath_year(8);
car.setMake_address("北京朝阳区");
car.setSpeed(200);
car.setTyre_interface_ref(tyre_long_implement);
car.start();
}
}
另一个例子
public abstract class Duck{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck()
{
}
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void performQuack()
{
quackBehavior.quack();
}
public void swim()
{
System.out.println("All ducks float,even decoys!");
}
}
public interface FlyBehavior
{
public void fly();
}
public class FlyWithWings implements FlyBehavior
{
public void fly()
{
System.out.println("i'm flying");
}
}
public class FlyNoWay implements FlyBehavior
{
public void fly()
{
System.out.println("i can't fly");
}
}
public interfaceQuackBehavior
{
public void quack();
}
public class Quack implements QuackBehavior
{
public void quack()
{
System.out.println("quack");
}
}
public class MuteQuack implements QuackBehavior
{
public void quack()
{
System.out.println("silence");
}
}
public class Squeak implements QuackBehavior
{
public void quack()
{
System.out.println("Squeak");
}
}
public class MallardDuck extends Duck{
public MallardDuck()
{
flyBehavior =new Quack();
quackBehavior =new FlyWithWings();
}
}
public class MiniDuckSimulator
{
public static void main(String[] args)
{
Duck mallard = new MallardDuck();
mallard.performFly();
mallard.performQuack();
}
}
类型:行为模式
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
UML图如下:
新建一个轮胎接口:
package strategy_interface;
public interface tyre_interface {
// tyre 轮胎
public void print_tyre_line();// 显示出轮胎的痕迹
}
新建2个轮胎接口的实现类:
package strategy_implement;
import strategy_interface.tyre_interface;
//长痕迹轮胎类
public class tyre_long_implement implements tyre_interface {
public void print_tyre_line() {
System.out.println("在路面上显示一个长轮胎痕迹");
}
}
package strategy_implement;
import strategy_interface.tyre_interface;
//短痕迹轮胎类
public class tyre_short_implement implements tyre_interface {
public void print_tyre_line() {
System.out.println("在路面上显示一个短轮胎痕迹");
}
}
组装一个Car车类:
package car_package;
import strategy_interface.tyre_interface;
public class Car {
private String make_address;// 制造地
private int death_year;// 报废年限
private int speed;// 速度
private tyre_interface tyre_interface_ref;// 轮胎的样式
public String getMake_address() {
return make_address;
}
public void setMake_address(String make_address) {
this.make_address = make_address;
}
public int getDeath_year() {
return death_year;
}
public void setDeath_year(int death_year) {
this.death_year = death_year;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public tyre_interface getTyre_interface_ref() {
return tyre_interface_ref;
}
public void setTyre_interface_ref(tyre_interface tyre_interface_ref) {
this.tyre_interface_ref = tyre_interface_ref;
}
public void start() {
System.out.println("车的基本信息为:");
System.out.println("制造地make_address:" + this.getMake_address());
System.out.println("报废年限death_year:" + this.getDeath_year());
System.out.println("速度speed:" + this.getSpeed());
System.out.println("Car 起动了!");
System.out.println("Car高速行驶,遇到一个大转弯,路面显示:");
this.getTyre_interface_ref().print_tyre_line();
}
}
让车跑起来,并且具有更换轮胎样式的功能:
package main_run;
import strategy_implement.tyre_long_implement;
import strategy_implement.tyre_short_implement;
import car_package.Car;
public class run_main {
public static void main(String[] args) {
tyre_long_implement tyre_long_implement = new tyre_long_implement();
tyre_short_implement tyre_short_implement = new tyre_short_implement();
Car car = new Car();
car.setDeath_year(8);
car.setMake_address("北京朝阳区");
car.setSpeed(200);
car.setTyre_interface_ref(tyre_long_implement);
car.start();
}
}
另一个例子
public abstract class Duck{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck()
{
}
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void performQuack()
{
quackBehavior.quack();
}
public void swim()
{
System.out.println("All ducks float,even decoys!");
}
}
public interface FlyBehavior
{
public void fly();
}
public class FlyWithWings implements FlyBehavior
{
public void fly()
{
System.out.println("i'm flying");
}
}
public class FlyNoWay implements FlyBehavior
{
public void fly()
{
System.out.println("i can't fly");
}
}
public interfaceQuackBehavior
{
public void quack();
}
public class Quack implements QuackBehavior
{
public void quack()
{
System.out.println("quack");
}
}
public class MuteQuack implements QuackBehavior
{
public void quack()
{
System.out.println("silence");
}
}
public class Squeak implements QuackBehavior
{
public void quack()
{
System.out.println("Squeak");
}
}
public class MallardDuck extends Duck{
public MallardDuck()
{
flyBehavior =new Quack();
quackBehavior =new FlyWithWings();
}
}
public class MiniDuckSimulator
{
public static void main(String[] args)
{
Duck mallard = new MallardDuck();
mallard.performFly();
mallard.performQuack();
}
}
相关文章推荐
- swift设计模式学习 - 策略模式
- 设计模式学习之--策略模式
- 学习设计模式第二十四 - 策略模式
- 设计模式学习——策略模式(Strategy Pattern)
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- 设计模式:策略模式(学习笔记)
- 设计模式学习之策略模式
- 【笨鸟先飞】Java重新学习日记14--设计模式之策略模式
- 设计模式学习笔记(六)之策略模式(Strategy)
- 设计模式学习笔记--Strategy 策略模式
- <C/C++ 版> 设计模式 学习之 策略模式
- 设计模式学习之策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- 设计模式之禅学习笔记--策略模式
- 设计模式学习之策略模式
- 设计模式学习--策略模式
- 设计模式学习系列十四:策略模式(Strategy)
- 设计模式学习之 策略模式
- 设计模式学习---策略模式
- java设计模式学习笔记之策略模式