您的位置:首页 > 移动开发 > Objective-C

设计模式之策略模式

2009-12-22 22:20 239 查看
            在java学习中常被人们说的继承关系真的是一个很不错的东西. 从面向对象的思想去理解继承,子类可以拥有父类的所有public 方法(行为)跟属性 . 这让我们在设计程序时,可以把公共相同的经常要使用的方法写在父类中,这好比Object拥有一个toString()方法一样,这样做的好处就是我们在程序中都有一个toString()方法。  因为在java中所有的类的父亲都是Object.  

          现在我们做个假设, 比如我们写了一个Computer(电脑)类,  可以给每一台电脑都有的公共行为,计算处理. (电脑可以浏览网页,可以看电影听音乐,,但不是所有的电脑都可以,比如ktv的点歌电脑,它只能用于点歌曲,是一种专门为某种服务而存在的特殊电脑),所以我们只给Computer类定义了处理计算的行为Calculation()

1.Computer类code:

package org;

/**

* 抽象父类

*

* @author Administrator

*

*/

public abstract class Computer {

Movies movies;

/**

* 默认的计算方法,每一个计算机都有

*

* @return

*/

public String Calculation() {

return "我会计算处理程序";

}

/**

* 提高一个Set方法用于获取看电影这个方法

*/

public void setMovies(Movies movies) {

this.movies = movies;

}

}

 

2.于此同时我们还在Movies(看电影的接口)

package org;

/**

* 看电影行为接口

*

* @author Administrator

*

*/

public interface Movies {

/**

* 看电影的方法

* @return

*/

public String Look();

}

 

3.在接口中我们定义了一个看电影的方法 Look()

 4.接口的实现类PC类code:

package org;

public class PC implements Movies {

@Override

public String Look() {

return "我可以看电影";

}

}

写到这里我们的策略模式差不多就完成了,我们写了一个测试类MyPc:

package org;

public class MyPc extends Computer {

public static void main(String[] args) {

MyPc pc = new MyPc();

String Calculation = pc.Calculation();// 我可以计算

System.out.println(Calculation);

Movies movies = new PC();

pc.setMovies(movies);

String getMovies = pc.movies.Look(); // 我可以看电影

System.out.println(getMovies);

}

}

 在MyPc里面我们拥有父类的计算能力也同时拥有看电影的能力,如果那天是个用于专门用途的特殊计算机我们不设置pc.setMovies(movies);就行了,如果制造了了功能强大的pc只要在父类中添加一个接口引用就行了.

策略模式的优点:

可以把公共的行为与特殊的行为很好的分开,  互补影响, 公共的行为我们可以很好的利用java中的继承关系得以很好的利用,特殊的行为,我们通过在父类的添加声明接口的引用,在给一个Set()方法用于获取引用,接口中定义特殊的行为。



 

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