您的位置:首页 > 编程语言 > Java开发

Java 接口应用案例 (策略设计模式使用)

2014-06-22 19:26 1091 查看
二、定义

策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算

法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。策略模式使这些算法

在客户端调用它们的时候能够互不影响地变化。这里的算法不要狭义的理解为数据结构中算

法,可以理解为不同的业务处理方法。

这种做法会带来什么样的好处呢?

它将算法的使用和算法本身分离,即将变化的具体算法封装了起来,降低了代码的耦合

度,系统业务策略的更变仅需少量修改。

算法被提取出来,这样可以使算法得到重用,这种情况还可以考虑使用享元模式来共享

算法对象,来减少系统开销(但要注意使用享元模式的建议条件)。

package com.vince.shejimoshi;

 

//对于每个几何图形而言,都有计算其计算面积的方法,但是具体计算各不相同

//不同的情况我就采用不同的策略啊(哦哦,策略设计模式么,好样的,需要伴随面向接口编程呢)

//为了简化开发,本实例将定义一个超类(无实际作用),使用面向接口编程,计算面积。

//运行效果

//图形的名称是:Circle

//图形的面积是:3.141592653589793

//图形的名称是:Rectangle

//图形的面积是:1.0

 

public class CeLueTuXing {

 

/**

 * @param args

 */

public static void main(String[] args) {

// TODO Auto-generated method stub

Graph g = new Graph();

// 调用圆类的方法

Circle c = new Circle("Circle", 1d);

System.err.println("图形的名称是:" + c.getName());

g.setFigureare(c);

System.out.println("图形的面积是:" + g.figureArea());

 

// 调用矩形类的方法

Rectangle re = new Rectangle("Rectangle", 1d, 1d);

System.out.println("图形的名称是:" + re.getName());

g.setFigureare(re);

System.out.println("图形的面积是:" + g.figureArea());

}

}

 

// 多余的注释

// 记住:抽象类中可以有普通方法、抽象方法、构造方法

// 抽象类可以不包含抽象方法,也就是抽象类中的方法都是普通方法

// 含有抽象方法的类一定是抽象类,抽象类不一定要含有抽象方法

class Graph {

// 定义一个接口类型变量

private FigureArea figureare;

 

// 属性的读写操作

public FigureArea getFigureare() {

return figureare;

}

 

// FigureArea figureare=new Circle("Circle", 1d);仔细看清楚,用到多态

// 所以,接口也有多态性

public void setFigureare(FigureArea figureare) {

this.figureare = figureare;

}

 

// 将变化的方法写进来(传啥类的对象进来,就调用啥类中的方法)

public double figureArea() {

return figureare.figureArea();

}

 

}

 

// 将计算面积的方法抽象为一个接口

interface FigureArea {

// 里面的方法默认是public abstract

public double figureArea();

}

 

// 第一个算法

class Circle implements FigureArea {

private String name;

private double r;

 

// 获取名称和半径

public Circle(String name, double r) {

this.name = name;

this.r = r;

}

 

// 属性的读写操作

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

// 实现接口中的方法

public double figureArea() {

// 求圆的面积

double a = Math.PI * Math.pow(r, 2);

return a;

}

}

 

// 第二个算法

class Rectangle implements FigureArea {

private String name;// 名称

private double width;// 宽

private double length;// 长

 

// 构造方法

public Rectangle(String name, double width, double length) {

this.name = name;

this.width = width;

this.length = length;

}

 

// 名称 属性的读写操作

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

// 实现接口中的方法

public double figureArea() {

// 求矩形的面积

double area = length * width;

return area;

}

}

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