栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式

个人理解:一个父接口,多个子实现类,这些子实现类对应着一个一个的策略,每个实现类有自己单一的功能(解耦合),大大降低了耦合度,建立一个总类(Contex),创建父接口对象,调用父接口中的方法。在实现时由客户去创建实现类,然后Contex里调用对应实现类里的方法。

理解起来不是特别难,又学会一种,冲冲冲!!!

官方文档 ----------------》》》》

策略模式

在策略模式(Strategy Pattern)中,⼀个类的行为或其算法可以在运⾏时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和⼀个行为随着策略对象改变⽽改变的context对象。策略对象改变context对象的执⾏算法。

介绍

意图:定义⼀系列的算法,把它们⼀个个封装起来,并且使它们可相互替换(多态)。

主要解决:在有多种算法相似的情况下,使⽤if...else所带来的复杂和难以维护。

何时使用:⼀个系统有许多许多类,⽽区分它们的只是他们直接的⾏为。

如何解决:将这些算法封装成⼀个⼀个的子实现类,可以任意地替换。

关键代码:实现同⼀个接⼝。

应用实例:

1.出游⽅式,选择骑⾃⾏⻋、坐汽⻋,每⼀种旅⾏⽅式都是⼀个策略。

2.JAVA AWT中的LayoutManager。

优点:

1.算法可以⾃由切换。

2.避免使⽤多重条件判断。

3.扩展性良好。

4.每一个策略对应一个子实现类,大大降低了耦合度

缺点:

1.类的数量会增多。

2.所有策略类都需要对外暴露(需要客户记忆多个策略类)。

使用场景:

1.如果在⼀个系统⾥⾯有许多类,它们之间的区别仅在于它们的⾏为,那么使⽤策略模式可以动态地让⼀个对象在许多⾏为中选择⼀种⾏为。

2.⼀个系统需要动态地在⼏种算法中选择⼀种。

3.如果⼀个对象有很多的行为,如果不⽤恰当的模式,这些行为就只好使⽤多重的条件选择语句来实现。

注意事项:如果⼀个系统的策略多于四个,就需要考虑使⽤混合模式,解决策略类膨胀的问题。

实现

我们将创建⼀个定义活动的Strategy接⼝和实现了Strategy接⼝的实体策略类。Context是⼀个使⽤了某种策略的类。 StrategyPatternDemo,我们的演示类使⽤Context和策略对象来演示Context在它所配置或使⽤的策略改变时的 ⾏为变化。

具体步骤

1.创建⼀个项⽬Java项⽬。

2.创建⼀个Strategy接⼝。

package src.com.设计模式.策略模式;
​
//一个实现类代表一个功能,易扩充,大大降低了耦合度
public interface Strategy {
    int doOperation(int num1,int num2);  //用doOperation对应算术运算的操作
}

3.创建实现接⼝的实体类OperationAdd。

package src.com.设计模式.策略模式;
​
public class OperationAdd implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1+num2;
    }
}

4.创建实现接⼝的实体类OperationSubtract。

package src.com.设计模式.策略模式;
​
public class OperationSubtract implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1-num2;
    }
}

5.创建实现接⼝的实体类OperationMultiply。

package src.com.设计模式.策略模式;
​
public class OperationMultiply implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1*num2;
    }
}

6.创建Context类。

package src.com.设计模式.策略模式;

public class Context {
    //依赖于策略的接口(不能依赖实现类)
    private Strategy strategy;
​
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    //执行策略的业务逻辑
    public Object executeStrategy(int num1,int num2){
        return strategy.doOperation(num1,num2);
    }
}

7.创建StrategyPatternDemo类,使⽤Context来查看当它改变策略Strategy时的⾏为变化。

package src.com.设计模式.策略模式;
​
public class StrategyPatternDemo {
    public static void main(String[] args) {
        int num1 = 1;
        int num2 = 2;
        Context context = new Context(new OperationAdd());
        System.out.println((int)context.executeStrategy(num1,num2));
        context = new Context(new OperationMultiply());
        System.out.println((int)context.executeStrategy(num1,num2));
    }
}

8.执⾏程序,输出结果。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/827511.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号