Head First设计模式1----------策略模式
来源:互联网 发布:复杂网络 pdf 编辑:程序博客网 时间:2024/06/04 18:47
********************************************************************************
********************************************************************************策略模式
********************************************************************************
设计原则:针对接口编程,而不是针对实现编程
设计原则:多用组合少用继承
问题:设计一些种类的鸭子,比如绿头鸭,橡皮鸭等
方法:
1:基本思路是先设计一个鸭子的超类,让各种种类的鸭子继承之,超类中包含鸭子共有的特性
class Duck{
quack();
swim();
display();//抽象方法,子类实现
}
class MallarDuck extends Duck{
MallarDuck();
display();//具体实现
}
class RedheadDuck extends Duck{
RedheadDuck();
display();//具体实现
}
2:现在想让部分鸭子能飞
首先想到在超类中加上fly()方法,但是想到有些类型鸭子fly方法不同,这样需要在每种子类中实现fly()方法,不能复用,于是另找方法,想到将fly()等方法单独出来,作为一个接口或者类,让需要的实现或继承之
作为接口还是类呢?如果作为接口,则需要的类实现这个接口,跟超类中加fly没什么区别
那就作为类吧
class fly1{
fly(){。。。};
}
class fly2{
fly(){。。。};
}
由于java中不能使用多继承,所以用组合
class MallarDuck extends Duck{
display();
fly1 flyinstant;
//怎么调用fly方法呢?用如下方法
flymethod(){
flyinstant.fly();
}
}
class RedheadDuck extends Duck{
display();
fly2 flyinstant;
//怎么调用fly方法呢?用如下方法
flymethod(){
flyinstant.fly();
}
}
这种方法有个更好的处理方法,会用到多态
interface flyimp{
fly();
}
class fly1 implements flyimp{
fly();
}
class fly2 implements flyimp{
fly();
}
class MallarDuck extends Duck{
display();
flyimp fly1;
flymethod(){
fly1.fly();
}
}
class RedheadDuck extends Duck{
display();
flyimp fly2;
flymethod(){
fly2.fly();
}
}
进一步可将flyimp 引用及flymethod放于超类中
interface flyimp{
fly();
}
class Duck{
quack();
swim();
display();//抽象方法,子类实现
flyimp flyinstant;
flymethod(){
flyinstant.fly();
}
}
class MallarDuck extends Duck{
display();
MallarDuck(){
flyinstant = new fly1();
}
}
class RedheadDuck extends Duck{
display();
RedheadDuck(){
flyinstant= new fly2();
}
}
3:一个完整实例
public abstract class Duck{
public Duck(){};
public void swim(){
printf(“swimming…\n”);
};//公用
public abstract void display();//抽象方法,子类实现
flyimp flyinstant;
flymethod(){
flyinstant.fly();
}
}
public class MallarDuck extends Duck{
public void display(){
printf(“mallarDuckdisplay…\n”);
}
public MallarDuck(){
flyinstant = new fly1();
}
}
public class RedheadDuck extends Duck{
public void display(){
printf(“RedheadDuck display…\n”);
}
public RedheadDuck(){
flyinstant = new fly2();
}
}
public interface flyinter{
public void fly();
}
public class fly1 implements flyinter{
public void fly(){
printf(“flymethod1…\n”);
}
}
public class fly2 implements flyinter{
public void fly(){
printf(“flymethod2…\n”);
}
}
public class Simulator(){
public static void main(String[] args){
Duck duck1 = new MallarDuck();
duck1.swim();
duck1.display();
duck1.flymethod();
Duck duck2 = new RedheadDuck();
duck2.swim();
duck2.display();
duck2.flymethod();
}
}
- Head First 设计模式:1策略模式
- Head First设计模式1----------策略模式
- 《Head First 设计模式》模式1——策略模式
- 《head first 设计模式》之策略模式
- head first 设计模式:策略模式
- 策略模式 - head first设计模式
- Head First 设计模式第一章 ----策略模式
- 《Head First设计模式》策略模式
- Head First设计模式-策略模式
- 【Head First设计模式】策略模式
- 《Head First 设计模式》策略模式
- 《Head First设计模式》之策略模式
- 《Head First 设计模式》之策略模式
- <Head First 设计模式>:策略模式--Duck
- Head First设计模式—策略模式
- 【Head First设计模式-读书笔记】策略模式
- Head First设计模式---策略、观察者模式
- Head First-设计模式:策略模式
- 开源一个BitmapHelper.java
- mongo 聚合操作 Java中代码
- A1156. 开心的金明
- 数据处理样例
- 关于cocos2d-x3.0和2.0之间的区别
- Head First设计模式1----------策略模式
- Count the Number(set 金马五校赛-东华大学)
- 21个最具代表性的英国著名地标建筑
- iOS开发-国际化-配置App多语言
- 跨进程通信中AIDL文件的理解
- 经验 | 游戏人成长唯一有效的途径:接触更多更优秀的人
- IDE中配置文件导入和打开新文件的一些问题
- 打印hibernate的SQL语句的几种办法
- Java学习之反射