设计模式1-》 策略模式
程序员文章站
2022-06-13 13:49:26
...
分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设
定行为对象。原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为
算法的变化独立于算法的使用者。
代码讲解
1:定义行为并进行抽象
1.1同一类型行为进行抽象后的不用实现方式
2:定义对象模型,并确定对象所承载的行为和对象的特有行为和熟悉
package designmode.mycelve.Behavi;
import designmode.mycelve.bo1.Sleep;
import designmode.mycelve.bo2.Talk;
/**
* * * GOOK LUCK * *
*
* @Author: wkn,
* @Date: 2020/2/16.
* @DESC: 定义一个能承载说话和睡觉的动物模型,这个模型不是具体的对象,
*/
public abstract class AnimalMode {
public Sleep sleep;
public Talk talk;
public AnimalMode() {
}
public void setSleep(Sleep sleep) {
this.sleep = sleep;
}
public void setTalk(Talk talk) {
this.talk = talk;
}
/**
* 内部对象的睡觉方法
*/
public void slee() {
sleep.slee();
}
/**
* 内部对象的说话方法
*/
public void tal() {
talk.tal();
}
/**
* 动物模型固有的方法1
*/
public void eat() {
System.out.println("吃饭");
}
/**
* 动物模型固有的方法1
*/
public void swim() {
System.out.println("洗澡");
}
public abstract void display();
}
2.1:对象模型定义好之后,确定具体的对象模型和领域行为
/**
* * * GOOK LUCK * *
*
* @Author: wkn,
* @Date: 2020/2/16.
* @DESC:
*/
public class Cat extends AnimalMode {
@Override
public void display() {
System.out.println("猫实体");
}
}
/**
* * * GOOK LUCK * *
*
* @Author: wkn,
* @Date: 2020/2/16.
* @DESC:
*/
public class Dog extends AnimalMode {
// public Dog() {
// sleep = new SideSleep();
// talk = new GuguTalk();
// }
@Override
public void display() {
System.out.println("狗实体");
}
}
3:测试
package designmode.mycelve;
import designmode.mycelve.Behavi.AnimalMode;
import designmode.mycelve.animal.Cat;
import designmode.mycelve.animal.Dog;
import designmode.mycelve.bo1.LieSleep;
import designmode.mycelve.bo1.SideSleep;
import designmode.mycelve.bo2.GuguTalk;
import designmode.mycelve.bo2.JijiTalk;
import org.junit.Test;
/**
* * * GOOK LUCK * *
*
* @Author: wkn,
* @Date: 2020/2/16.
* @DESC: 策略模式测试类
*/
public class MyCeleTest {
@Test
public void test12() {
AnimalMode dog = new Dog();
AnimalMode cat = new Cat();
dog.display();
dog.eat();
dog.setSleep(new SideSleep());
dog.slee();
dog.setTalk(new JijiTalk());
dog.tal();
System.out.println("------------------------------------------");
cat.display();
cat.eat();
cat.setSleep(new LieSleep());
cat.slee();
cat.setTalk(new GuguTalk());
cat.tal();
}
}
注意点:
1、分析项目中变化部分与不变部分
2、多用组合少用继承;用行为类组合,而不是行为的继承。更有弹性
3、设计模式有没有相应的库直接使用?有些库或框架本身就用某种设计模式设计的
4、如果找不到适用的模式怎么办
上一篇: Gateway新一代网关
下一篇: 23种设计模式-19-状态者模式