
设计模式
勇敢地追
这个作者很懒,什么都没留下…
展开
-
代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问。 解释:举例来说,你想在美国买iphone6,但是你没有到美国去,恰巧你有一朋友到美国出差,于是你让朋友帮忙代买iphone6.整个过程就是代理模式,你是目标对象,你朋友作为代理,代你完成你想进行的操作。首先定义一个接口用来表示需要代理的动作public interface Request { public void getIphon原创 2017-02-28 22:18:37 · 264 阅读 · 0 评论 -
迭代器模式
1.定义提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。2.实现(遍历工程员工)public class Employee { public String name; public int age; public Employee(String name, int age) { this.name = name; t原创 2017-03-16 21:58:42 · 279 阅读 · 0 评论 -
观察者模式
1.定义观察者模式是一种行为类模式,它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。2.实例(订阅杂志)/** * 抽象观察者类,为所有具体观察者定义一个接口,在得到通知时更新自己 */public interface Observer { /** * 有更新就推送消息 */ public void原创 2017-03-12 21:37:39 · 217 阅读 · 0 评论 -
命令模式
1.定义将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。2.实现(俄罗斯方块)/** * 俄罗斯方块操作的真正逻辑代码(左移,右移,快速落下,改变形状) */public class RealOperation { public void toLeft(){ System.out.println("t原创 2017-03-12 18:23:14 · 222 阅读 · 0 评论 -
解释器模式
1.定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。(其中语言就是我们需要解释的对象,文法就是这个语言的规律,解释器就是翻译机,通过文法来翻译语言。)2.简单实现(解析一个算术表达式)/** * 抽象的算术运算解释器 */public abstract class AlgriExpression { public abstract in原创 2017-03-11 21:27:21 · 329 阅读 · 0 评论 -
策略模式
在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条原创 2017-02-26 14:42:39 · 408 阅读 · 0 评论 -
责任链模式
1.定义责任链模式是行为型设计模式之一,它使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。2.实战演练用三个BroadcastReceiver来演示责任链事件处理 FirstReceiver (当limit==1000的时候获取msg打印并退出,否则添加一个新的msg给下一个Receicer)public原创 2017-03-10 22:00:53 · 243 阅读 · 0 评论 -
状态模式
1.定义状态模式中的行为是由状态来决定,不同的状态下有不同的行为。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。2.实战演练用户登录系统,同一个操作在不同状态下会有不同的操作 (1)先定义一个用户状态的接口public interface UserState { /** * 转发 */ public void forward(Conte原创 2017-03-09 22:35:34 · 228 阅读 · 0 评论 -
装饰者模式
假设我们需要买一杯奶茶,计算总共花了多少钱,这个比较容易,一个class一个getPrice就行。那如果我要买一杯珍珠奶茶呢?再new一个?如果还有珍珠果肉奶茶?再new一个?显然不科学,所以我们需要装饰者模式装饰者模式定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。设计初衷:通常可以使用继承来实现功能的拓展,如果这些原创 2017-02-26 19:58:57 · 253 阅读 · 0 评论 -
模板方法模式
1.定义定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.简单实现(电脑开机)/** * 抽象的 Computer */public abstract class AbstractComputer { /** * 开启电源 */ protected abstract void power原创 2017-03-18 21:38:06 · 244 阅读 · 0 评论 -
原型模式
1.定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。被复制的实例就是“原型”,这个原型是可定制的。2.示例public class WordDocument implements Cloneable { private String mText; private ArrayList<String> mImages = new ArrayList<String>();原创 2017-03-04 22:36:30 · 241 阅读 · 0 评论 -
Builder模式
1.定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2.使用场景(1)相同的方法,不同的执行顺序,产生不同的事件结果时。 (2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。 (3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个使用建造者模式非常适合。 (4)当初始化一个对象特别复杂时,如参数多,且很多参数有默认值。原创 2017-03-04 16:56:20 · 514 阅读 · 0 评论 -
简单工厂模式
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 比如我们需要实现登录功能,我们通常会这么写代码: String type = "account"; if(type.equals("account")){ // verify原创 2017-02-25 10:24:46 · 388 阅读 · 1 评论 -
单例模式探究
单例模式的五种写法: 懒汉 恶汉 静态内部类 枚举 双重校验锁1.懒汉class LazySingleton{ private static LazySingleton singleton; private LazySingleton(){ } public static LazySingleton getInstance(){ if(sin原创 2017-02-20 14:18:08 · 267 阅读 · 0 评论 -
面向对象的六大原则
1.单一职责原则(SRP)简单的说就是:一个类中应该是一组相关性很高的函数、数据的封装。两个不一样的功能不应该放在一个类中。2.开闭原则(OCP)定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。 当软件需要变化时,我们应该尽量通过扩展的方式实现变化,而不是通过修改原有的代码来实现。因为直接的修改,可能会影响已有的正常代码。不利于出现错误时排除问题。当然实际开发中,转载 2017-03-02 23:27:34 · 245 阅读 · 0 评论 -
动态代理
1.重要参数:在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。 (1)InvocationHandler 每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象原创 2017-07-24 16:17:47 · 395 阅读 · 0 评论