欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式1-》 策略模式

程序员文章站 2022-06-13 13:49:26
...
分别封装行为接口实现算法族超类里放行为接口对象在子类里具体设
定行为对象原则就是分离变化部分封装接口基于接口编程各种功能此模式让行为
算法的变化独立于算法的使用者
 
 
设计模式1-》 策略模式

 

 
 
 
 
 
代码讲解
 
1:定义行为并进行抽象
 
设计模式1-》 策略模式
 
 
 
1.1同一类型行为进行抽象后的不用实现方式
 
设计模式1-》 策略模式
 
设计模式1-》 策略模式
 
 
 
 
设计模式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-》 策略模式
 
 
 
 
 
 
 
 
 
注意点:
1、分析项目中变化部分与不变部分
2、多用组合少用继承;用行为类组合,而不是行为的继承。更有弹性
3、设计模式有没有相应的库直接使用?有些库或框架本身就用某种设计模式设计的
4、如果找不到适用的模式怎么办
 
 
 
 
 
 
相关标签: JAVA设计模式