策略模式和工厂模式给开发人员带来了哪些好处
一,策略设计模式
策略模式(Strategy Pattern),定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化。
1. 策略设计模式在实际中的体现
- 数据库操作封装
- 微信扫码登录注册绑定操作
注: **封装变化,把可变的功能单独封装起来,目的是为了更好的适应变化
**
2. 由简单的代码,剖析策略模式的本质
public interface ISave {public void save(String data);
}
public class FileSave implements ISave{@Overridepublic void save(String data){System.out.println("把数据"+data+"保存到文件中。");}
}
public class DBSave implements ISave{@Overridepublic void save(String data){System.out.println("把数据"+data+"保存在数据库中");}
}
public class NetSave implements ISave{@Overridepublic void save(String data){System.out.println("把数据"+data+"保存到网络中。");}
}
public class DataContext {//DataContext只依赖接口,不依赖具体的实现,//这样的写法就是(面向接口编程)private ISave iSave;public static ISave getSave()throws Exception{//属性文件工具类Properties prop = new Properties();prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("codingke/strategy/config.properties"));String className = prop.getProperty("context.save");ISave iSave = (ISave) Class.forName(className).newInstance();return iSave;}public DataContext(ISave iSave){this.iSave = iSave;}public void save(String data){iSave.save(data);}
}
public class Test {public static void main(String[] args)throws Exception {DataContext dc = new DataContext(DataContext.getSave());dc.save("这是要存储的数据");}
}
oo设计原则 |
---|
1.面向接口编程(面向抽象编程) |
2.封装变化 |
3.多用组合,少用集成 |
3. 做了这么多,我们实现了什么?
客户选择数据存储的方式,只需在配置文件中进行修改即可。
测试资源文件如下:
context.save=codingke.strategy.DBSave //config.properties
测试结果:
4. 策略模式对开发的意义
思考1: 把业务功能实现类的修改放在配置文件(properties、xml),而不是放在代码中,为什么?
- 如果是修改代码:那么意味着就要重新编译,重新测试,重新打包,重新部署(上传服务器)
- 如果是修改配置文件:只需要修改完配置文件后,重新启动一下服务器
思考2: 使用解耦的方法来解决了什么问题?
- 让软件更加利于维护(提高程序的可扩展性),去牺牲性能
思考3: 什么应用场景下,我们应该选择策略设计模式?
- 当一个功能有多种实现方式时,我们应该使用策略设计模式,把功能抽象出来,然后用不同的子类各自提供实现类,在真正使用时,根据业务情况来动态替换。
二,工厂设计模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种 创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接 口来指向新创建的对象
1. 一张图来表明工厂模式干了什么工作
2. 从代码入手探究工厂模式的本质
public interface Product {public void work();
}
public class Computer implements Product {@Overridepublic void work() {System.out.println("电脑开始工作。。。");}
}
public class Phone implements Product {@Overridepublic void work() {System.out.println("手机开始工作。。。");}
}
public class ProductFactory {public static Product getProduct(String name) throws ProductException{if (ProductType.PHONE.equals(name)){return new Phone();}else if(ProductType.COMPUTER.equals(name)){return new Computer();}else{throw new ProductException("产品名称不存在");}}
}
public class ProductException extends RuntimeException {public ProductException(String exceptionMessage){super(exceptionMessage);}public ProductException(){super();}
}
public interface ProductType {public static final String PHONE = "phone";public static final String COMPUTER = "computer";
}
public class Test {public static void main(String[] args) {Product p = ProductFactory.getProduct("computer");p.work();}
}
测试结果:
3. 工厂模式的实际意义是什么?
3.1 工厂模式要解决的问题
- 工厂模式:让对象之间的强依赖,转化成对工厂对象的依赖
- 让调用者与被调用者之间解耦,这样好处是,当两者发生变化时,相互之间的影响降到最低,这个原则体显了项目的可维护性
3.2 工厂设计模式的优点
- 面向接口编程,体现了面向对象的思想;
- 将创建对象的工作转移到了工厂类;
3.3 JDK 中的工厂设计模式实例
- java.util.Calendar, ResourceBundle and NumberFormat getInstance() 使用了工厂方法模式
- valueOf() 在包装类中,如Boolean, Integer 也使用了工厂方法模式
- Spring框架中,就是使用了工厂模式来解决对象的创建
策略模式和工厂模式给开发人员带来了哪些好处相关推荐
- 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...
- java策略模式 工厂模式_策略模式和工厂模式搭配使用
策略模式和工厂模式的搭配使用可以很好地消除代码if-else的多层嵌套 需求 针对店下商铺,有这样一个需求,对用户客户分为了普通客户.vip客户.超级vip用户.专属vip用户4个等级,每当用户购买商 ...
- 设计模式-策略模式和工厂模式结合使用
怎么把策略模式和工厂模式结合起来使用 如果大家对策略模式和工厂模式不是很了解的话可以先看前面文章 策略模式:https://www.jianshu.com/p/958281936901 工厂模式:ht ...
- 策略模式、工厂模式、装饰者模式总结解析
今天在面试的时候被问到自己策略模式怎么用的时候有被问懵到,以至于明明是自己的代码在脑海里已经混乱了,而且面试官提出的还是没有更好的利用设计模式也让我思考了一下我之前的代码到底是怎么实现的,重新梳理下策 ...
- 策略模式和工厂模式的区别
文章目录 策略模式和工厂模式的区别 相似点 差异 用途不一样 关注点不一样 UML图 实例 策略模式和工厂模式的区别 相似点 在模式结构上,两者很相似: 差异 用途不一样 工厂是创建型模式,它的作用就 ...
- java策略模式和工厂模式的区别
这两天初学设计模式的时候发现工厂模式和策略模式写法上相似,感觉很疑惑.既然相似,为何还要专门写成两种不同的模式呢.在翻阅了各个高手的总结后,偶有一点启发,特此记下. 有一个高手说 工厂相当于黑盒子,策 ...
- 策略与简单工厂模式结合的实现--收银软件的代码及UML图
策略模式和简单工厂模式的结合:把分支判断放到环境角色中. 解决简单工厂模式中提到的问题: ●关键:分支的switch依然去不掉 ●解决方法:依赖注入.反射.XML 简单工厂模式 策略模式 收银软件的策 ...
- 策略模式与工厂模式比较
这段时间看了一些设计模式,看到策略模式与工厂模式的时候,总是感觉他们很相似,不要区分,到具体的场景了你可能还在徘徊到底用工厂还是策略呢?这几天就想写一篇关于策略模式与工厂模式区别的文章,但一直没思路, ...
- 策略模式和工厂模式在促销系统下的应用
策略模式和工厂模式在促销系统下的应用 设计模式为我们提供了在某些应用场景下特定问题的解决方案,今天我们利用策略模式和工厂模式实现一个简单的促销系统. 实现语言:PHP 我们先来回顾一下策略模式和工厂模 ...
最新文章
- 1 用python进行OpenCV实战之用OpenCV3实现图片载入、显示和储存
- 获取AFP共享的文件夹及其权限
- python入门到精通需要学多久-Python从入门到精通只需要一个月就够了!
- Linux 0.00 代码解析(一)
- 两名黑客因发现特斯拉漏洞获Model 3一辆和3.5万美元奖金
- Spring Cloud Stream与RabbitMQ 生产者和消费者位于同一个应用服务
- VB 获取计算机的分辨率大小
- jenkins linux虚拟机,Linux虚拟机安装Jenkins并实现部署
- 多功能jQuery日期控件基于jeDate
- ST-Link系列usb驱动器下载
- 有监督学习与无监督学习
- Excel表格中如何将文本型改为数值型数据
- 戴尔电脑重装系统的blos设置
- python可读性好吗_Python 输出可读性更好的时间文本
- 路由器:分类、定义及标准
- Anki 学习排行榜
- 物联网小试一下——使用阿里云控制Arduino套件灯的开关
- 微博爬虫及舆情分析-3.文本清理与制作词云
- comsol如何定义狄利克雷边界_有限元分析(FEA)是个什么东东
- 数字图像处理 - 什么是数字图像处理
热门文章
- 这就要从双引号和单引号的作用讲起:
- Heroes Empires链游,游戏攻略与收益详解
- SpaceShootGame(太空大战)
- MHT富媒体文件分析及提取转换HTML文件-Delphi7实现QQ聊天记录导出文件提取
- C语言中判断回文数用数组的方法,【C语言】回文数和回文字符串的判断
- 安兔兔跑分可信吗_骁龙888安兔兔跑分曝光,总分只有63.4万,翻车如此严重?...
- springboot整合腾讯云cos对象储存
- 一个iOS流畅性优化工具
- 8种IO口模式的配置(复制粘贴的,供自己学习的)
- 企业如何做到有效的防范勒索软件攻击?