![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
whuissyxa
这个作者很懒,什么都没留下…
展开
-
迭代器模式
个人笔记,请不要被误导。 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 java中很多集合类实现了iterator接口,其中的remove()方法可以删除next()方法返回的最后一个元素。数组不支持iterator()方法,下面的代码写了一个自定义的数组迭代器。 迭代器分为内部迭代器和外部迭代器。内部迭代器,客户无法控制遍历的过程,不如外部迭代器有弹性原创 2017-10-28 15:54:01 · 344 阅读 · 0 评论 -
外观模式
个人笔记,请不要被误导。 外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 遵循原则:最少知识原则:只和朋友交谈。不要让太多类耦合在一起,免得修改系统一部分,会影响到其他部分。 方针:就任何对象而言,在该对象方法内,我们只应该调用属于以下范围的方法: 该对象本身的方法; 该对象的任何组件的方法; 被当做方法参数而传递过来的原创 2017-10-26 16:55:42 · 193 阅读 · 0 评论 -
装饰者模式
案例:咖啡店想建立生成订单的程序。订单要有咖啡的种类、加的调料种类以及它们的价格。以后可能出现新的调料,有的咖啡不能添加某种调料。 学到的新的原则:对扩展开放,对修改关闭。 装饰者模式:动态的将责任添加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。 解决方案:咖啡作为 被装饰者,调料作为装饰者。装饰者将 被装饰者或者 装饰过的被装饰者包(装饰)起来,利用这种组合的方式,为被装饰者原创 2017-10-23 10:23:14 · 245 阅读 · 0 评论 -
策略模式
《Head First 设计模式》这本书读起来感觉不枯燥,讲解很直观,可读性好。 策略模式的案例大致是这样的:父类为Duck,子类是不同的duck,父类子类的display()等方法基本相同,直接继承就好。但quack()和fly()这两个方法,子类差别比较大。这里用到设计原则: 找出应用中可能需要变化之处,把它们独立起来,不要和那些不需要变化的代码混到一起。 解决的办法是增加FlyBeha原创 2017-10-22 20:41:00 · 230 阅读 · 0 评论 -
复合模式
个人笔记,请不要被误导 复合模式:结合多个模式组成一个解决方案,解决一再发生的一般性问题。 这里是典型的MVC: View是与用户交互的界面,负责显示。有Controller的引用,用于把用户指令交给Controller,controller再交给Model执行;也有Model的引用,因为Modle是Observable,View要注册成它的Observer。View不同控件有嵌套关系,使用原创 2017-11-05 10:46:21 · 272 阅读 · 0 评论 -
多个模式合作
复合模式:结合多个模式组成一个解决方案,解决一再发生的一般性问题。 这篇博客写的不是复合模式,而是多个模式合作解决问题。之所以不是复合模式,是因为复合模式要求解决一再发生的一般性问题。典型案例是MVC。 下面是多个模式合作解决问题的案例: 现在有不同种类的鸭子类,实现Quackable接口(有quack()方法)。 想把鹅也加进来,用到适配器模式,实现Quackable接口,并且有鹅的引用原创 2017-11-05 10:06:17 · 321 阅读 · 0 评论 -
适配器模式
个人笔记,不要被误导。 适配器模式:将一个类(被适配者)的接口转换成客户期望的另一个接口(目标)。适配器让原本不兼容的类可以合作无间。 public class ClockWork { public void screwClockWork(){}; public void releaseClockWork(){}; } public interface ElectricalA原创 2017-10-26 16:40:28 · 264 阅读 · 0 评论 -
单件模式
单件模式:确保一个类只有一个实例,并提供一个全局访问点。原创 2017-10-24 22:09:56 · 184 阅读 · 0 评论 -
命令模式
写博客是为了个人做笔记,希望大家不要被误导。 命令模式:将请求封装成对象(这里的实现Command接口的类),这可以让你使用不同的请求、队列,或者日志请求来参数化其它对象。命令模式也可以支持撤销操作。 案例:一个遥控器,实现音响(stereo)开、关、调高、调低、撤销操作或者是一系列操作。这些操作是可变的。而且遥控器还可以控制其它电器。采用命令模式,将这些操作封装成对象,它们共同实现一原创 2017-10-25 18:00:31 · 213 阅读 · 0 评论 -
工厂模式
个人见解甚浅,写博客纯是为了做笔记,希望大家不要被误导。 工厂模式:工厂方法模式:定义一个创建对象的接口(本例中是PizzaStore),但由子类决定要实例化的是哪个类。工厂方法让类把实例化推给子类(总之实例化不推给实体类,实现了实体类解耦)。 此例是pizza店订单系统。客户输入所要pizza种类,参数传进PizzaStore子类中,子类创建Pizza子类(比如NYCheesePizza)对原创 2017-10-24 21:37:09 · 178 阅读 · 0 评论 -
代理模式
个人笔记,请不要被误导。 代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。(被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象,下面的三个例子远程代理、虚拟代理和保护代理分别代表这三类)。 实体和代理者实现同一个接口,用户用的时候不用关心究竟是谁,实现用户和实体的解耦。一般代理者都有实体的引用,这样才能调用它。这和适配器模式很相似区别在于前者代理者和实体实现同原创 2017-10-31 20:44:04 · 288 阅读 · 0 评论 -
观察者模式
观察者模式:定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它所有依赖者都收到通知并自动更新。 案例:一个WeatherData类可以接受即时温度、湿度等信息,三种不同布告板分别接收信息显示不同内容(以后可能要添加布告板)。解决方案是WeatherData作为主题,布告板作为观察者,接收即时消息。依赖关系很弱,基本只调用其他类的方法,或者不在构造函数调用其他类对象,实现 public原创 2017-10-22 21:08:34 · 130 阅读 · 0 评论 -
状态模式
个人笔记,请勿被误导。 状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 这个模式把状态封装成独立的类,并将动作委托到代表当前状态的对象。 案例介绍:糖果机有五种状态:没有收到硬币、收到硬币、糖果售罄。几种状态之间转换的操作依次是:投币、摇杆、出糖果。出糖果后如果没有糖果就转到售罄状态,否则回到没有收到硬币的状态。这里面状态是易变的,所以要封装它。比如后来出一个新原创 2017-10-30 18:50:54 · 318 阅读 · 0 评论 -
组合模式
组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象(叶子节点)以及对象组合。 也就是我们能把相同的操作应用在组合和个别对象上,忽略对象组合和个别对象差异。这实现了透明性,虽然违背了单一责任设计原则。 public abstract class MenuComponent { public void add(MenuComponent原创 2017-10-28 16:58:34 · 275 阅读 · 0 评论 -
模板方法模式
个人笔记,请不要被误导 模板方法模式:在一个方法中定义一个方法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 不同子类的相同方法在抽象父类里声明为final,防止子类修改。不同子类的不同方法在抽象父类声明为abstract,让子类去实现。还有一种子类可以选择实现或不实现,父类中既不声明abstract,也不声明final,父类原创 2017-10-27 16:13:11 · 186 阅读 · 0 评论