设计模式——策略模式

策略模式:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的用户。

策略模式提倡的编程原则:

  • 封装变化
  • 多用组合,少用继承
  • 针对接口编程,不针对实现编程

代码设计:

 1 package pattern.strategy;
 2 
 3 /**
 4  * 鸭子的抽象父类
 5  * 用于定义一些公共的方法
 6  * @author CS_Xiaochao
 7  *
 8  */
 9 public abstract class Duck {
10     
11     FlyBehavior flyBehavior;
12     QuackBehavior quackBehavior;
13     
14     /**
15      * 展示当前鸭子所属类型
16      */
17     public abstract void display();
18     
19     /**
20      * 让鸭子叫出声来
21      */
22     public String quack(){
23         return quackBehavior.quack();
24     }
25     
26     /**
27      * 让鸭子飞起来
28      */
29     public String fly(){
30         return flyBehavior.fly();
31     }
32     
33     /**
34      * 改变鸭子的飞行行为
35      * @param flyBehavior
36      */
37     public void setFlyBehavior(FlyBehavior flyBehavior){
38         this.flyBehavior = flyBehavior;
39     }
40     
41     /**
42      * 改变鸭子的叫声行为
43      * @param quackBehavior
44      */
45     public void setQuackBehavior(QuackBehavior quackBehavior){
46         this.quackBehavior = quackBehavior;
47     }
48 }
Duck抽象类
 1 package pattern.strategy;
 2 
 3 /**
 4  * 鸭子飞行类别接口
 5  * @author CS_Xiaochao
 6  *
 7  */
 8 public interface FlyBehavior {
 9     
10     String fly();   //飞行方式
11 }
FlyBehavior接口
 1 package pattern.strategy;
 2 
 3 /**
 4  * 鸭子叫声类型接口
 5  * @author CS_Xiaochao
 6  *
 7  */
 8 public interface QuackBehavior {
 9     
10     String quack();  //叫声方式
11     
12 }
QuackBehavior接口
 1 package pattern.strategy;
 2 
 3 public class FlyWithNoWings implements FlyBehavior {
 4 
 5     @Override
 6     public String fly() {        
 7         return "没有翅膀,但我也能飞~";
 8     }
 9 
10 }
FlyWithNoWings具体类
 1 package pattern.strategy;
 2 
 3 public class FlyWithWings implements FlyBehavior {
 4 
 5     @Override
 6     public String fly() {
 7         return "用翅膀飞~";
 8     }
 9 
10 }
FlyWithWings具体类
 1 package pattern.strategy;
 2 
 3 public class GagaQuack implements QuackBehavior {
 4 
 5     @Override
 6     public String quack() {
 7         // TODO Auto-generated method stub
 8         return "嘎嘎叫~";
 9     }
10 
11 }
GagaQuack具体类
 1 package pattern.strategy;
 2 
 3 public class ZhizhiQuack implements QuackBehavior {
 4 
 5     @Override
 6     public String quack() {
 7         // TODO Auto-generated method stub
 8         return "吱吱叫~";
 9     }
10 
11 }
ZhizhiQuack具体类
 1 package pattern.strategy;
 2 
 3 public class NoQuack implements QuackBehavior {
 4 
 5     @Override
 6     public String quack() {
 7         // TODO Auto-generated method stub
 8         return "我不会叫~";
 9     }
10 
11 }
NoQuack具体类
 1 package pattern.strategy;
 2 
 3 /**
 4  * 
 5  * @author CS_Xiaochao
 6  *
 7  */
 8 public class GeneralDuck extends Duck {    
 9     
10     /**
11      * 构造方法
12      */
13     public GeneralDuck() {
14         super();
15         flyBehavior = new FlyWithWings();
16         quackBehavior = new GagaQuack();
17     }
18 
19     /**
20      * 显示当前鸭子的属性行为
21      */
22     @Override
23     public void display() {
24         System.out.println("我是一只普通的鸭子: " + super.fly() + " ," + super.quack());
25     }
26 
27     public static void main(String[] args) {
28         
29         Duck duck = new GeneralDuck();
30         duck.display();
31         
32         //改变当前鸭子的行为
33         duck.setFlyBehavior(new FlyWithNoWings());
34         duck.setQuackBehavior(new ZhizhiQuack());
35         duck.display();
36     }
37 
38 }
GeneralDuck具体类

代码设计思想:Duck是一个关于鸭子的抽象类,其中定义了鸭子的一些共同行为、属性,FlyBehavior和QuackBehavior分别是鸭子的飞行行为接口和叫声行为接口,具体的飞行方式和叫声方式通过实现这两个接口,然后在接口声明的方法中进行实现,这样可以在确定调用框架的前提下,随意的修改叫声和飞行方式。而FlyWithWings、FlyWithNoWings这两个类分别实现了飞行方式的接口,定义了具体的飞行方式; GagaQuack、ZhizhiQuack、NoQuack分别实现了叫声方式接口,分别定义了一种叫声方式。Duck类中简单的说就是搭好了调用框架,实现了最通用的调用方式,这样可以保持松耦合。然后在具体的鸭子类中(GeneralDuck),可以指定具体的鸭子的具体的叫声方式和飞行方式,这些方式都是之前已经定义好的,此时只需要选择合适的组件,进行“拼接”即可。

Java I/O中的FilenameFilter接口就是采用了策略模式的思想,通过在实现FilenameFilter接口的accept(File dir,  String name)中定义相关规则,可以对文件名进行相关过滤。

 

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值