设计模式
公众号:网瘾少年之路
公众号:网瘾少年之路
展开
-
设计模式系列之五工厂模式
Java实现简单工厂 简单工厂应该是最简单的工厂方法了,也是最常见的。下面,通过代码就知道为什么这么说了。public class SimplePizzaFactory { public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals("cheese")) {原创 2016-12-08 23:47:45 · 395 阅读 · 0 评论 -
设计模式总结
看完《Head First设计模式》一书,本篇算是对设计模式做一个简单的总结。01 为什么要使用设计模式 个人觉得,设计模式存在的价值既是为了解决实际的问题。在碰到实际问题,合适的场景使用设计模式会带来如下好处:让代码结构更加清晰使得代码易于维护利于后期功能扩展使用共同的术语方便技术人员相互交流02 如何使用设计模式 对于如何使用设计模式,个人觉得没必要去记住书中的设计模式使用套路,一原创 2016-12-28 23:12:06 · 806 阅读 · 0 评论 -
设计模式系列之十三代理模式
代理模式可以理解为通过一个中间者来访问数据,比如我们通过代理来访问互联网,通过代理商购买游戏点卡等。这些都属于代理模式的设计思想。 上图为代理模式的一般数据交互逻辑。在Java后台开发中,使用RMI调用远程数据既采用了代理模式。 在我的实际开发中,以个人开发经验,使用代理模式最主要是为了解决如下两个问题: 封装访问远程数据的具体实现逻辑。即客户端只需调用Proxy提供的方法即可,不关心原创 2016-12-25 18:16:01 · 611 阅读 · 0 评论 -
设计模式系列之十二状态模式
举一个自动取款机的场景来说明状态模式的使用。去自动提款机取钱首先得有插卡的动作,最后还会有取卡的动作。对应两个状态,一个是无卡状态,另外一个是有卡状态。一、代码实现public class ATM { final static int NO_CARD = 0; final static int HAVE_CARD = 1; //提款机初始状态为无卡 int s原创 2016-12-24 16:23:55 · 710 阅读 · 0 评论 -
设计模式系列之十迭代器模式
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 有这样的一个需求。一家集团公司在北京和上海分别有一家子公司,每家公司内部有自己的部门,且自己提供了打印部门的方法。其中一个子公司以数组来保存部门列表,另外一个以ArrayList来保存。现在需要打印所有的部门。一、原始实现//部门对象public class Dept { private String原创 2016-12-20 23:42:36 · 492 阅读 · 0 评论 -
设计模式系列之十一组合模式
组合模式:允许将对象组合成树型结构来表现“整体/部分”层次结构。组合能让一致的方式处理个别对象以及对象组合。 接上一篇设计模式系列之十迭代器模式的业务逻辑,现在集团公司业务扩张,新增了湖南分公司,那么采用迭代器模式可以很方便的打印出湖南分公司的所有部门。一、新需求实现//湖南分公司public class HNBranch { ArrayList<Dept> depts; pub原创 2016-12-21 23:59:38 · 720 阅读 · 0 评论 -
设计模式系列之七适配器模式
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 对于适配器模式,实际上就是一个转接口的概念。比如iphone7的耳塞必须通过转接才能适配,比如水货笔记本的插头必须通过一个转接口才能适配国内的插座等。下面通过代码来具体认识一下适配器模式。原始接口//原始接口public interface OldInterface { //原始方法原创 2016-12-14 22:37:54 · 441 阅读 · 0 评论 -
设计模式系列之八外观模式
外观模式:提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。 下面通过一个图来说明外观模式的使用,此图来自于《Head First设计模式》一书。 从上图中可以看到,通过一个统一的Facade来调用复杂的子系统的类。 按我的理解,外观模式实际上就是抽取一些公共的业务逻辑封装起来,以统一的方法来调用。使代码结构更加清晰,易于维护,避免流水代码。 举一原创 2016-12-17 16:49:46 · 433 阅读 · 0 评论 -
设计模式系列之四装饰者模式
装饰者模式的定义: 装饰者模式:动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。Java实现 借用《Head First设计模式》 中的咖啡店卖咖啡的样例。便于说明,这里简洁一下。假如我要写一个咖啡点单计价的软件。业务逻辑是这样的,一杯咖啡10元,如果加糖另外加1元,如果加奶另外加两元。实际来讲,采用硬编码的方式我可以写三个类来实现该需求:1.咖啡单买;2.咖啡原创 2016-12-05 23:20:17 · 504 阅读 · 0 评论 -
设计模式系列之三观察者模式
先来看看观察者模式的定义 观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。Java实现下面以消息中心的需求作为例子。有一个消息中心,当消息中心收到新消息时,动态通知所有的收听者。消息中心部分public interface Subject { //- 注册收听者 public void registerObserve原创 2016-12-02 23:27:05 · 391 阅读 · 0 评论 -
设计模式系列之六命令模式
命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也可支持可撤销的操作。 有一个这样的业务逻辑,在客厅的进门处有一个开关面板,该面板上有两个开关,第一个开关是打开客厅的灯,第二个开关是打开客厅的电视。下面就来具体实现一下。 首先实现电视与灯: public class Light { String location = ""; publi原创 2016-12-10 23:30:47 · 610 阅读 · 0 评论 -
设计模式系列之二策略模式
Java实现有如下需求,明天周一,需要去公司上班,目前从家里到公司有两种策略,一种是公交,一种是地铁。下面就来实现一下 ### 定义具体策略java public interface IStrategy { //对策略的描述 public void description(); } “`java public class Bus implements IStrateg原创 2016-12-02 23:26:10 · 391 阅读 · 0 评论 -
设计模式系列之一单例模式
Java实现不考虑线程安全的写法public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) {原创 2016-12-02 23:24:32 · 476 阅读 · 0 评论 -
设计模式系列之九模板方法模式
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 有一个泡茶和冲咖啡的业务,他们都有差不多相似的流程。一、不使用设计模式public class Tea { //泡茶流程 void process() { boilWater(); steepTeaBag原创 2016-12-17 23:58:20 · 693 阅读 · 0 评论