提供 一种方法 顺序访问 一个聚和 对象中的各个元素,而又不暴露其内部的表示或实现。 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示。把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。 1.迭代器允许访问聚合的元素,而不需要暴露它的内部结构。 2.迭代器将遍历聚合的工作封装进一个对象中。 3.当使用迭代器的时候,我们依赖聚合提供遍历。 4.迭代器提供了一个通用的接口,让我们遍历聚合项,当我们编码使用聚合的项时,就可以使用多太机制。 package pattern; import java.util.ArrayList; import ...
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板就是一个方法。更具体的说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。 1 。模版方法定义了算法的步骤,把这些步骤地实现延迟到子类。 2。模版方法模式为我们提供了一种代码复用的重要技巧。 3。模版方法的抽象类可以定义具体的方法,抽象的方法和钩子。 4。抽象方法由子类实现。 5。钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,资料可以选择要不要去覆盖它。 6。为了防止子类改 ...
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 1。当需要使用一个现有的类而其接口并不符合你的需求时,就使用适配器。 2。当需要简化并统一一个个很大的接口或者一群复杂的接口时,就使用外观。 3。适配器改变接口以符合客户的期望。 4。外观将客户从一个复杂的子系统中解耦。 5。实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定。 6。实现一个外观,需要将子系统组合进外观众,然后将工作委托给子系统执行。 7。适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多重继承。 8。你可以为一个子系统实现一个以上的外观。 ...
将一个类的接口,转换成客户期待的另一个接口。适配器让原本接口不兼容的类可以合作无间。 package pattern; interface Turkey { public void gobble(); public void fly(); } class WildTurkey implements Turkey{ public WildTurkey(){} public void gobble(){ System.out.println("Gobble gobble"); } public void fly(){ System.out ...
1 。命令模式将发出请求的对象和执行请求的对象解耦。 2。在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接受者和一个或者一组动作。 3。调用者通过调用命令对象的execute()发出请求,这会使得接受者的动作被调用。 4 。调用者可以接受命令当作参数,甚至在运行时动态进行。 5。命令可以支持撤销,做法是实现一个undo()方法来回到execute()被执行前的状态。 6。宏命令是命令的一种简单的延伸,允许调用多个命令。宏方法也可以支持撤销。 7。实际操作时,很常见使用“聪明”命令对象,也就是直接实现了请求,而不是将工作委托给接收者。 8。命令也可以用来实现日志和事物系统。 pa ...
确保一个类只有一个实例,并且只有一个全局访问点。如果使用多个类加载器,可能导致单例模式失效而产生多个实例。单例不允许继承,全局变量也会产生多个实例. 单例模式和工厂模式,抽象工程模式 其实都是为了创建对象,但是单例模式只能产生一个对象实例,而工厂模式可以产生不同类型的对象,抽象工厂模式却能批量产生不同类型的对象。单例模式产生的对象有些孤独,是寡者,没有兄弟,一般对特别重要的资源才可能用到单例模式,这些资源只有一份,就如皇帝,太阳只有一个,皇帝是不希望其他人与他同时也是皇帝的,哪怕是自己的兄弟姐妹。 synchronized 对线程同步有作用,但是会降低性能。如果对性能要求不高采用此办法 ...
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要关心具体实际产出的产品是什么。 总结 : 所有工厂都是用来封装对象的创建。 简单工厂,虽然不是真正的设计模式,但是仍然不失为一个简单的方法,可以把客户程序从具体类解耦。 工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。 抽象工厂使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法 中。 所有工厂模式都是通过减少应用程序和具体类之间的依赖关系促进松耦合。 工厂方法允许类将实例化延迟到子类进行。 抽象工厂创建相关的家族,而不需要依赖他们的具体 ...
工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要实例化的类是哪一个,工厂方法让类把实例化 推迟到子类。 package pattern; import java.util.ArrayList; public abstract class PizzaStore { SimplePizzaFactory factory; public PizzaStore() { } public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orde ...
 package pattern; public class StarbuzzCoffee { public static void main(String args[]) { Beverage beverage = new Espresso(); System.out.println(beverage.getDescription() + "$" + beverage.cost(0.5)); Beverage beverage2 = new DarkRoast(); beverage2 = new Mocha(beverage2); beverage2 = n ...
观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状态时,他的所有依赖着都会收到通知改变状态。 观察者模式 有点类似 打草惊蛇,一石双鸟。对主题进行扩展,不会影响观察者,添加观察者也业不会影响主题。 1.观察者模式定义了对象之间一对多的关系。 2。主题(也就是可观察者)用一个共同的接口来更新观察者 3。观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口。 4 。使用此模式时,你可以被观察者处推或者拉数据。然而推的方式被认为更正确。 5。有多个观察者时,不可以依赖特定的通知次序。 6。java 有多种观察者模式的实现,包括了通用的java。u ...
策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。策略模式有点像调包计和偷梁换柱。 设计模式就是为了适应变化那些大师而想起来的,能适应变化的软件才能长命,人也一样,只有适应外界变化,方可生存。 package pattern; public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public Duck() { } public abstract void display(); public void perfo ...
1。软件开发中唯一一个不变的是 变化。大千世界,千奇百怪,行行色色,光影陆离,瞬息万变,然而这些在这些变化中我们总是能找到不变的东西,只有找到不变的东西,我们才可以以不变应万变,才能不被万物所累,超脱万物,以不变应万变才处理万物的不二法门。 2。分离开不变的和变化的,把不变的封装在一起,把变化的封装在一起。好比这个社会,把坏人犯了法的人都封闭在监狱里,这样才容易管理,而把变化的封装在一起也容易处理 3。针对接口变成,不是针对实现编成。现实中好的公司管理,领导在于不在,都可以很好的运行,这就是公司针对某个管理角色管理,不是针对某个人管理。接口其实是抽象和规律,就是针对规律编程,只有规律是变化比较 ...
如何让大脑把记得更深刻 1。慢点,你理解的越多,记得月少 2。勤做练习 ,自己记笔记 3。阅读“there are no dumb questions” part 4。上床睡觉前不要看其他书,最少不要看比较难的书籍 5。要多喝水 6。把你学到的讲给别人,这样记忆更深刻 7。听听大脑怎么说,如果大脑把刚刚看的东西就忘记了,就该休息了 8。要有感觉 9 。设计也写东西
定义:为另一个对象提供一个替身或者战位符以范围这个对象。 要点: 1。代理模式为另外一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种。 2。远程带来管理客户和远程对象之间的交会。 3。虚拟代理控制访问实例化开销大的对象。 4。保护代理基于调用者控制对对象方法的访问。 5。代理模式有许多变体,例如:缓存代理,同步代理,防火墙代理和写入时复制代理。 6。代理在结构上类似装饰者,但是目的不同。 7。装饰者模式为对象加上行为,而代理则是控制访问。 8。java内置的代理支持,可以根据需要将来动态代理,并将所有调用分配到所选的处理器。 9。就合其他的包装者一样,代理 ...
写这本书的确是个意外,因为在之前,我和所有的做技术的朋友一样,也是喜欢通过看书学习技术的读者。一直保持着读到好书好句时拍案叫绝、看到无深度或翻译差的书时破口大骂的那种愤青状态。但今年上半年的一次机遇,让我也成为了写技术书给大家分享学习心得的作者,现在想来,多少还是有一些不可思议。《大话设计模式》刚出版,是不是好书需要时间来检验,但的确它是一本很特殊的书。《大话设计模式》为什么要用对话手法写技术书,为什么喜欢用故事引入主题,为什么非常在意代码的演变过程而不是直接讲解结果?关于这些问题,或许下面所写的内容可以给出答案。   我98年师范数学本科毕业,在绝大部分同学的简历里写着要成为一名合格的人民教 ...
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 1。状态模式允许一个对象基于内部状态而拥有不同的行为。 2。和程序状态机(PSM)不同,状态模式用类代表状态。 3。Context会将行为委托给当前状态对象。 4。通过每个状态封装进一个类,我们把以后需要做的任何改变局部化。 5。状态模式和策略模式有相同的类图,但是他们的意图不同。 6。策略模式通常会用行为或算法来配置Context类。 7。状态模式允许Context随着状态的改变而改变行为。 8。状态转换可以由State类或者Context类控制。 9。使用状态模式通常会导致设计中类的数目大量增加。 ...
允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 创建一个树形结构,在同一个结构中处理嵌套菜单和菜单项组。通过将菜单和项放在相同的结构中,我们创建了一个“整体/部分”层次结构,即使由 菜单 和 菜单 项 组成 的 对象 树 。但是 可以 将 他视为 一个 整体,像是 一个 丰富的大菜单 。 1.我们应该努力让一个类只分配一个责任。 2.组合模式提供了一种结构,可同时包容个别对象和组合对象。 3。组合模式允许客户对个别对象和组合对象一视同仁。 4.组合结构内的任意对象称为组件,组件可以是 ...