Java设计模式之--策略模式(strategy)
来源:互联网 发布:经济学入门书籍 知乎 编辑:程序博客网 时间:2024/03/29 16:35
行为型模式:
行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。根据它们的具体技术实现可分为4类,第一类:通过父类与子类的关系进行实现。第二类:两个类之间。第三类:类的状态。第四类:通过中间类如下图:
策略模式(strategy)
概念:
定义一系列的算法,把每一个算法单独实现并封装, 并且使它们可相互替换。使得算法可独立于使用它的客户而变化。客户可以决定采用哪种策略(算法)
案例:
Message 选择通过Email 还是短讯发送信息给特定联系人
来看类图:
联系人 类
public class PhoneContract { private String email; private String phone; private String name; public String getEmail() { return email; } public PhoneContract setEmail(String email) { this.email = email; return this; } public String getName() { return name; } public PhoneContract setName(String name) { this.name = name; return this; } public String getPhone() { return phone; } public PhoneContract setPhone(String phone) { this.phone = phone; return this; }}
MessageSendor接口
public interface MessageSendor { public void send(PhoneContract phoneContract,String message);}
public class SMSMessage implements MessageSendor { @Override public void send(PhoneContract phoneContract, String message) { sendMessage(phoneContract.getName(),phoneContract.getPhone(),message); } private void sendMessage(String name,String address,String message){ System.out.println(String.format("%s sendMessage %s to %s %s.", this.getClass().getName(),message,name,address)); }}
public class EmailMessage implements MessageSendor { @Override public void send(PhoneContract phoneContract, String message) { sendMessage(phoneContract.getName(),phoneContract.getEmail(),message); } private void sendMessage(String name,String address,String message){ System.out.println(String.format("%s sendMessage %s to %s %s.", this.getClass().getName(),message,name,address)); }}
MessageClient 类
public class MessageClient { public MessageSendor getMessageSendor() { return messageSendor; } public void setMessageSendor(MessageSendor messageSendor) { this.messageSendor = messageSendor; } private MessageSendor messageSendor; public MessageClient(MessageSendor sendor){ setMessageSendor(sendor); } public void sendMessage(PhoneContract phoneContract,String message){ if(null!=messageSendor){ messageSendor.send(phoneContract, message); } }}测试类:public class WorkClass { public void test() { PhoneContract phoneContract = new PhoneContract().setName("Jim").setPhone("+8613012345678").setEmail("Jim@gmail.com"); MessageSendor messageSendor = new SMSMessage(); MessageClient messageClient = new MessageClient(messageSendor); messageClient.sendMessage(phoneContract, "hello"); messageClient.setMessageSendor(new EmailMessage()); messageClient.sendMessage(phoneContract, "lunch"); }}测试输出:I/System.out: com.example.qinghua_liu.myapplication.designpatten.action.SMSMessage sendMessage hello to Jim +8613012345678.I/System.out: com.example.qinghua_liu.myapplication.designpatten.action.EmailMessage sendMessage lunch to Jim Jim@gmail.com.
0 0
- java设计模式之策略模式 Strategy
- Java设计模式之--策略模式(strategy)
- java设计模式之 strategy策略模式
- java设计模式之Strategy (策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- Java 设计模式--策略(Strategy)
- Subsets1解题报告
- 邮箱发送
- 文件存取编程基础
- 计算机网络体系结构及简单通信
- bzoj4379: [POI2015]Modernizacja autostrady
- Java设计模式之--策略模式(strategy)
- CentOS7安装Oracle 11gR2 图文详解
- Word2Vec学习笔记(五)——Negative Sampling 模型(续)
- 剑指offer----合并两个排序的链表
- JAVA 读取文件的几个类
- 图片展示集的排列问题
- js 字符串倒置
- 第十章:使用MapKit开发地图服务
- 高德地图定位