欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 设计模式之策略模式

设计模式之策略模式

2024/10/25 12:13:34 来源:https://blog.csdn.net/2301_76862031/article/details/141647304  浏览:    关键词:设计模式之策略模式

策略模式的概念

策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户而变化。

个人对策略模式的一些理解

策略类中对策略接口实现类方法再封装,根据不同的需求使用不同的策略

举个栗子

小久的书架上有三本书,英语书,数学书,语文书,小久想读书有三种策略:读英语书,读数学书,读语文书,想读那本书就使用哪种策略

使用代码实现

1)准备书本接口类

package org.xiji.strategyTwo.book;public interface Book {String getBook();
}

2)书本接口实现类

1.语文书

package org.xiji.strategyTwo.book.Impl;import org.xiji.strategyTwo.book.Book;/*** 语文书*/
public class ChineseBook implements Book {@Overridepublic String getBook() {return "语文书";}
}

2.英语书

package org.xiji.strategyTwo.book.Impl;import org.xiji.strategyTwo.book.Book;/*** 英语书*/
public class EnglishBook implements Book {@Overridepublic String getBook() {return "英语书";}
}

3.数学书

package org.xiji.strategyTwo.book.Impl;import org.xiji.strategyTwo.book.Book;/*** 数学书*/
public class MathBook implements Book {@Overridepublic String getBook() {return "数学书";}
}

3)读书策略

package org.xiji.strategyTwo.book;/*** 读书策略*/
public class BookStrategy {private Book book;public BookStrategy(Book book){this.book = book;}/*** 获取书本**/public String getBookStrategy(){return book.getBook();}public BookStrategy() {}
}

4)创建用户类

package org.xiji.strategyTwo.book;/*** 用户*/
public class User {private String name;public User() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public User(String name) {this.name = name;}public void readBook(String book){System.out.println(name + "正在读" + book);}
}

5) StrategyTwoMain 

package org.xiji.strategyTwo;import org.xiji.strategyTwo.book.BookStrategy;
import org.xiji.strategyTwo.book.Impl.ChineseBook;
import org.xiji.strategyTwo.book.Impl.EnglishBook;
import org.xiji.strategyTwo.book.Impl.MathBook;
import org.xiji.strategyTwo.book.User;/*** 策略模式*/
public class StrategyTwoMain {public static void main(String[] args) {User user = new User("小久");//如何小久想读英语书,通过策略模式获取英语书System.out.println("小久想读英语书");String englishBook = new BookStrategy(new EnglishBook()).getBookStrategy();user.readBook(englishBook);System.out.println("小久想读数学书");//如果小久想读数学书,通过策略模式获取数学书String mathBook = new BookStrategy(new MathBook()).getBookStrategy();user.readBook(mathBook);//如果小久想读语文书,可以通过策略模式获取语文书System.out.println("小久想读语文书");String chineseBook = new BookStrategy(new ChineseBook()).getBookStrategy();user.readBook(chineseBook);}
}

6)运行结果

如何添加新的读书策略?

创建新的书本类,实现book接口,并且在读书策略类中获取,调用方法

添加历史书籍

1)创建历史书本类

package org.xiji.strategyTwo.book.Impl;import org.xiji.strategyTwo.book.Book;public class HistoryBook implements Book {@Overridepublic String getBook() {return "历史书";}
}

2)修改StrategyTwoMain类

        

package org.xiji.strategyTwo;import org.xiji.strategyTwo.book.BookStrategy;
import org.xiji.strategyTwo.book.Impl.ChineseBook;
import org.xiji.strategyTwo.book.Impl.EnglishBook;
import org.xiji.strategyTwo.book.Impl.HistoryBook;
import org.xiji.strategyTwo.book.Impl.MathBook;
import org.xiji.strategyTwo.book.User;/*** 策略模式*/
public class StrategyTwoMain {public static void main(String[] args) {User user = new User("小久");//如何小久想读英语书,通过策略模式获取英语书System.out.println("小久想读英语书");String englishBook = new BookStrategy(new EnglishBook()).getBookStrategy();user.readBook(englishBook);System.out.println("小久想读数学书");//如果小久想读数学书,通过策略模式获取数学书String mathBook = new BookStrategy(new MathBook()).getBookStrategy();user.readBook(mathBook);//如果小久想读语文书,可以通过策略模式获取语文书System.out.println("小久想读语文书");String chineseBook = new BookStrategy(new ChineseBook()).getBookStrategy();user.readBook(chineseBook);//获取小久想读历史书了System.out.println("小久想读历史书");String historyBook = new BookStrategy(new HistoryBook()).getBookStrategy();user.readBook(historyBook);}
}

3)运行结果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com