设计模式
文章平均质量分 81
何时成为大牛
屌丝程序员一枚
展开
-
八、状态模式State(行为型模式)
允许对象在其内部状态变化时改变其行为,对象看起来会改变其类。缺点也显而易见了,如果状态太多了,对应的状态类也会比较多的。。比如一个MM在她高兴与不高兴时候她的行为是不一样的:abstractclass MMState{ public abstract void smile(); public abstract void cry(); public abstr原创 2016-04-21 16:47:19 · 647 阅读 · 0 评论 -
六、中介者模式Mediator(行为型模式)
简述调停者模式(Mediator pattern)软件设计模式的一种,用于模块间解耦,通过避免对象互相显式的指向对方从而降低耦合。问题① 多个对象重复访问,无规律性。② 一个对象集合的交互良好定义,但是交互方式复杂。通常有非结构依赖。③ 对象复用困难,因为对象指向和交互很多其他的对象④ 在多个类之间的分布式行为的控制问题:应该不用建立很多子类就是先本地化参与者说明①原创 2016-04-19 18:11:25 · 372 阅读 · 0 评论 -
七、备忘录模式Memento(行为型模式)
其目的是,在不违反封装原则的前提下.采集和备份一个对象的内部状态以便这个对象可以在以后恢复到之前的某个状态.在Memento模式中,有如下角色:Memento (备忘录)* 存储Originator的内部状态. 根据Originator的需要.可以存储任意的内部状态.* 保护对状态的访问.除了Originator对象外,其他对象不能访问其存储的内部状态.Memeoto实原创 2016-04-21 16:37:14 · 4150 阅读 · 0 评论 -
九、策略模式Strategy(行为型模式)
定义一系列算法,封装每个算法,使它们可以互换,策略允许算法随使用它的客户的不同而不同。public class Test { public static void main(String[] args) { //-----------------// int[] a={1,3,2,6,4}; DataSorter.sort(a); Dat原创 2016-04-21 16:58:13 · 279 阅读 · 0 评论 -
十、责任链模式Chain of Responsibility(行为型模式)
单向的责任链interface Filter { String doFilter(String str);}class FilterChain implements Filter { List filters = new ArrayList<>(); public FilterChain addFilter(Filter f) { this.filters.a原创 2016-04-21 17:31:23 · 354 阅读 · 0 评论 -
十一、访问者模式(行为型模式)
使用这个模式后就可以在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 特点访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得原创 2016-04-21 17:44:39 · 247 阅读 · 0 评论 -
十二、单例模式Singleton(创建型模式)
确保类只有一个实例,并提供访问它的一个全局点。第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == nul原创 2016-04-21 18:29:04 · 394 阅读 · 0 评论 -
十三、工厂模式Factory(创建型模式)
一、引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?! 而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运原创 2016-04-22 15:30:06 · 3399 阅读 · 1 评论 -
十四、原型模式Prototype(创建型模式)
1:原型模式的本质原型模式的本质:克隆生成对象。克隆是手段,目的还是生成新的对象实例。正是因为原型的目的是为了生成新的对象实例,原型模式通常是被归类为创建型的模式。原型模式也可以用来解决“只知接口而不知实现的问题”,使用原型模式,可以出现一种独特的“接口造接口”的景象,这在面向接口编程中很有用。同样的功能也可以考虑使用工厂来实现。另外,原型模式的重心还是在创建新的对象实例,至于创建原创 2016-04-22 16:04:54 · 3848 阅读 · 1 评论 -
十五、建造者模式Builder(创建型模式)
Builder设计模式类似于Factory,都是用于生产一种产品,但是他们之间还是有一些区别的。至于有什么区别,仁者见仁,智者见智,我会在介绍完Builder模式之后说说我自己的看法,当然我的想法也参考了很多其他人的看法。下面先看一个例子吧: 当要生产的一种产品具有相同的结构,并且每个构件的生产都很繁杂,就可以用Builder模式将具体构件的生产与整个成品的组装分离开来。还是拿本文原创 2016-04-22 16:28:02 · 456 阅读 · 0 评论 -
十六、适配器模式Adapter(结构型模式)
1、意图适配器模式,把一个类的接口变换成客户端所期待的另一种接口,从而使原本不匹配而无法在一起工作的两个,类能够在一起工作。适配器模式分为类适配器模式和对象适配器模式。关于类适配器模式,因为java的单继承,如果继承一个类,另外的则只能是接口,需要手动实现相应的方法。2、结构图和代码为了简明直接,我省略了相关的其他适配器 ,只以此两个适配器为例。原创 2016-05-03 14:44:35 · 532 阅读 · 0 评论 -
二十一、装饰模式Decorator(结构型模式)
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。以下情况使用Decorator模式1. 需要扩展一个类的功能,或给一个类添加附加职责。2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。4. 当不原创 2016-05-05 19:54:42 · 283 阅读 · 0 评论 -
二、模版模式与回调Template Method(行为型模式)
模版模式又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤。我们使用冲泡咖啡和冲泡茶的例子加工流程:咖啡冲泡法:1.把水煮沸、2.用沸水冲泡咖啡、3.把咖啡倒进杯子、4.加糖和牛奶茶冲泡法: 1.把水煮沸、2.用沸水冲泡茶叶、3.把 茶 倒进杯子、4.加蜂蜜 实践步骤:原创 2016-04-15 15:52:46 · 347 阅读 · 0 评论 -
零、设计模式基础
1、变与不变的分离是设计Hook函数及应用框架的基本原则和手艺。就android框架而言,所谓[不变]的部分,就是它属于各种应用程序件的共同部分,所以不随着应用的改变而改变,因此称之为不变。分离出变与不变部分之后,就可以将不变部分写在父类别里,而不变的部分就写在子类别里,然后就有类别继承机制组织起来。public class AA {private String x;AA(Stri原创 2016-04-15 16:26:53 · 279 阅读 · 0 评论 -
一、Hook(抽象)函数
看完高焕堂老师的视频,自己总结下知识。所谓的Hook,就是用来接合两个东西的接口。如果两个东西于不同时间出现,则一方会预留空间,给予另一方于未来时刻能以实体来填补该空间,两者虚实相依,就密合起来了。Hook函数是Android框架与应用类别的接合处。Android以来类的继承的可Overridable函数来作为主要的Hook函数。C++例子://Ex02-01.cpp#inclu原创 2016-04-15 15:13:02 · 5306 阅读 · 1 评论 -
十七、外观模式Facade(结构型模式)
Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。为子系统中的一组接口提供统一的接口,门面模式(Facade)定义了使子系统易用于使用的高级接口。未使用Facade时候: 使用Facade时候:在遇到以下情况使用Facade模式:1、当你要为一个复杂子系统提供一个简单接口时。子原创 2016-05-03 15:36:07 · 327 阅读 · 0 评论 -
二十二、代理模式Proxy 第一部分(结构型模式)
引言Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。通过阅读本文,读者将会对 Java 动态代理机制有更加深入的理解。本文首先从 Java 动态代理的运行机制和特转载 2016-05-14 14:56:16 · 239 阅读 · 0 评论 -
二十二、代理模式Proxy 第二部分(结构型模式)
本文希望将 Java 动态代理机制从接口扩展到类,使得类能够享有与接口类似的动态代理支持。设计及特点新扩展的类名为 ProxyEx,将直接继承于 java.lang.reflect.Proxy,也声明了与原 Proxy 类中同名的 public 静态方法,目的是保持与原代理机制在使用方法上的完全一致。图 1. ProxyEx 类继承图模板转载 2016-05-14 17:12:37 · 357 阅读 · 0 评论 -
十八、桥接模式Bridge(结构型模式)
生活中的一个例子: 拿汽车在路上行驶的来说。既有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,它们所行驶的环境(路)也有不同类型,在软件系统中就要适应两个方面(不同车型,不同道路)的变化,怎样实现才能应对这种变化呢?概述:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应原创 2016-05-04 16:49:29 · 354 阅读 · 0 评论 -
十九、享元模式Flyweight(结构型模式)
享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。两个状态内蕴状态存储在享元内部,不会随环境的改变而有所不同,是可以共原创 2016-05-04 17:30:45 · 268 阅读 · 0 评论 -
二十、组合模式Composite(结构型模式)
组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。文件系原创 2016-05-04 17:43:54 · 226 阅读 · 0 评论 -
四、迭代器模式Iterator(行为型模式)
迭代器模式为顺序访问集合对象的元素提供一种方式,且不暴露其底层表示法。package interator; publicclass Test1 { publicstaticvoid main(String[] args) { // ArrayList al = new ArrayList(); LinkedList al = new LinkedLi原创 2016-04-15 18:13:53 · 651 阅读 · 0 评论 -
三、命令模式Commond(行为型模式)
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。package commond;import java.util.ArrayList;import java.util.List;publicclass CommondTest {}class MM { String name; publ原创 2016-04-15 17:36:09 · 685 阅读 · 0 评论 -
五、观察者模式Observer(行为型模式)
定义定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖对象都会自动获得通知。观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象。这样一来,当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更新。关键要素主题主题是观察者观察的对象,一个主题必须具备下面三个特征。持有监听的原创 2016-04-15 18:29:29 · 2876 阅读 · 0 评论