随笔分类 - Head First设计模式
摘要:首先这两种方式都是延迟初始化机制,就是当要用到的时候再去初始化。 但是Effective Java书中说过:除非绝对必要,否则就不要这么做。 1. DCL (double checked locking)双重检查: 如果出于性能的考虑而需要对实例域(注意这个属性并没有被static修饰)使用延迟初始
阅读全文
摘要:背景:我们在实现单例模式的时候往往会忽略掉多线程的情况,就是写的代码在单线程的情况下是没问题的,但是一碰到多个线程的时候,由于代码没写好,就会引发很多问题,而且这些问题都是很隐蔽和很难排查的。 例子1:没有volatile修饰的uniqueInstance 这里面的结果有可能会是:(没有真正重现过,
阅读全文
摘要:模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的步骤。好莱坞原则:别调用(打电话)我们,我们会调用(打电话给)你。
阅读全文
摘要:外观模式(facade):提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。设计原则---"最少知识"原则:只和你的密友谈话。原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。方针:就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:1)该对象本身;2)被当做方法的参数而传递进来的对象;3)此方法所创建或实例化的任何对象;4)对象的任何组件。public float getTemp(){ //这个方法耦合了一个类 return station.getThermometer().g
阅读全文
摘要:适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器分为:1)"对象"适配器;下面例子就是对象适配器。 2)"类"适配器。两者区别:对象适配器采用的是组合方法; 类适配器采用的是继承方法。适配者与装饰者区别:适配器将一个对象包装起来以改变其接口; 装饰者将一个对象包装起来以增加新的行为和责任。工程名称:TurkeyAdapter 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx, TurkeyAdapter.zip 1 package com...
阅读全文
摘要:命令模式:将"请求"封装成对象,以便使用不同的请求、队列、或者日志来参数化其他对象。命令模式也支持可撤销的操作。(餐厅点餐模拟流程)命令模式将发出请求的对象和执行请求的对象解耦,在被解耦的两者只讲是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作。工程名称:Command 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx,Command.zip
阅读全文
摘要:工程名称:命令接口:CommandInSimple 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx,CommandInSimple.zip1 package com.jyu.command;2 3 /**命令接口*/4 public interface Command {5 6 public void execute();7 }打开电灯的具体命令对象: 1 package com.jyu.command; 2 3 public class LightOnCommand implements Command { 4 5 ...
阅读全文
摘要:单件模式:确保一个类只有一个实例,并提供一个全局访问点。(巧克力工厂锅炉 模拟流程)java中实现单件模式需要私有的构造器、一个静态方法和一个静态变量。工程名称:SingletonPattern(eclipse) 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx,SingletonPattern.zip; 1 package com.jyu.singletonpattern; 2 3 /** 4 * "双重检查枷锁":首先检查是否实例已经创建了,如果尚未创建,"才"进行同步。 5 * 这样一来只有第
阅读全文
摘要:抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。(披萨店生产披萨模拟流程)抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或关心)实际产出的具体产品是什么。这样一来就从具体的产品中被解藕。依赖倒置原则:要依赖抽象,不要依赖具体类。这个原则说明了:不能让高层组件依赖底层组件,而且,不管高层或底层组件,“两者”都应该依赖抽象。工程名称:AbstractFactory 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx,AbstractFactory.zip 1 package com.jyu.
阅读全文
摘要:简单工厂不是一个设计模式,只是一种变成习惯,常被误认为是“工厂模式”。(披萨店生产披萨模拟流程)工程名称:SimpleFactory 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx ,SimpleFactory.zip 1 package com.jyu.pizza; 2 3 public abstract class Pizza { 4 5 protected String name; 6 7 public void prepare(){ 8 System.out.println(name...
阅读全文
摘要:工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。(披萨店生产披萨模拟流程)工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象的过程封装的目地。简单工厂和工厂方法之间的差异:1)简单工厂不是一个设计模式,常被误认为是“工厂模式”。2)简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。3)简单工厂的做法,可以将对象的创建封装起来,但是简单工厂具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。工程名称:Factory 下载目录:http://www.cnblogs.com/jrs..
阅读全文
摘要:装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。设计原则:类应该对扩展开放,对修改关闭。我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为。如能实现这样的目标,有什么好处呢?这样的设计具有弹性可以应对改变,可以接受新的功能来应对改变的需求。工程名称:DecoratorInJDK 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx ,DecoratorInJDK.zip 1 package com.jyu.jdk; 2 3 import java.io.FilterInpu...
阅读全文
摘要:装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。(星巴兹咖啡)设计原则:类应该对扩展开放,对修改关闭。我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为。如能实现这样的目标,有什么好处呢?这样的设计具有弹性可以应对改变,可以接受新的功能来应对改变的需求。工程名称:Decorator(eclipse) 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx ,Decorator.zip 1 package com.jyu.abstractclass; 2 3 /** 4 * 饮料..
阅读全文
摘要:观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 当你试图勾勒观察者模式时,可以利用报纸订阅服务,以及出版者和订阅者比拟这一切。设计原则:为了交互对象之间的松耦合设计为努力。工程名称:SubjectAndObsever(eclipse) 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx,SubjectAndObsever.zip 1 package com.jyu.interfaces; 2 3 /** 4 * 主题接口 5 * @author JRSmith 6 * ...
阅读全文
摘要:观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 当你试图勾勒观察者模式时,可以利用报纸订阅服务,以及出版者和订阅者比拟这一切。设计原则:为了交互对象之间的松耦合设计为努力。注意:java内置的Observable是一个类,要想一个类成为可观察者,就必须继承Observable类,但这样就限制了这个类的复用潜力了。工程名为:SubjectAndObseverInJDK,下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx,SubjectAndObseverInJDK.zip 1 p
阅读全文
摘要:设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。设计原则:多用组合,少用继承.策略模式(strategy pattern):定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。用例:鸭子对象
阅读全文

浙公网安备 33010602011771号