`
文章列表
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己。 观察者模式的组成 1.抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类或接口来实现 2.抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。 3.具体主题角色(Watched):把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观 ...
组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也可以是目录。按照这种方式,计算机的文件系统就是以递归结构来组织的。如果你想要描述这样的数据结构,那么你可以使用组合模式Composit ...
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 访问一个聚合对象的内容而无需暴露它的内部表示。 支持对聚合对象的多种遍历。 为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。 自java1.5中集合实现Iterator接口,故此模式可以用List实现,现在极少会有自己设计该模式的情况。

装饰模式

Decorator pattern 装饰模式是用于对象的创建,而此对象的创建基于原来对象的加强,也就是通过原组件对象的参数传递,把此对象层层加强。 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 二.组成部分: 1.       抽象构件:原始的功能接口 2.       具体构件:具体的原始功能类 3.       装饰角色:持有具体构件类的对象,以便执行原有功能 4.       具体装饰:具体扩展的功能在这里 Component: public abstract class CarParent { public void ru ...

命令模式

命令模式: 将请求封闭成对象,这可以让你使用不同的请求,队列.或者日志请求来参数化其他对象.命令模式式可支持撤销技术操作. 好处: ◆很容易构造一个命令队列 ◆记录相关的命令日志 ◆增加命令的状态,实现命令的撤销和重做 ◆允许接受请求的一方决定是否可做 ◆新的命令轻而易举可以加入其中 缺点:可能会有过多的具体命令类存在 实现: 也不难,第一步关键是建立Command对象。拥有点面向对象的思想,就知道把它先抽象,让继承它的对象去具体实现。Client对象是发布命令的。Invoker对象是传递命令的,就是跑腿的。Receiver是受气包,底层最累的程序员,负责干活吧。看看下面的类 ...
桥梁(Bridge)模式 桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。 在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。 抽象化 存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些 ...
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 Builder模式是一种对象创建型模式,它跟工厂模式(包括工厂方法模式与虚拟工厂模式)一样,都用来创建类的对象。我们先阐述一下Builder模式的定义: Builder模式用来创建复合对象,并把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象;另一方面,为了统一创建过程,又把对象创建的操作统一封装在名为Direc ...
模板方法(Template Method)模式属于行为模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。 结构模式: 1) AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。 2) ConcreteClass(具体类):实现父类中的抽象方法以完 ...
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 意图: 你想使用一个已经存在的类,而它的接口不符合你的需求。 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 (仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 public class Human { public void Speak() { System.out.println(&q ...

门面模式

Facade外观模式: 为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。 为什么要使用门面模式:     一般而言子系统和其他子系统之间,客户端和实现层之间存在这很大的依赖性,引入Facade模式将一个子系统与它的客户端以及其他的子系统分离,可以提高子系统的独立性和可移植行.     在构建一个层次化的系统的时候,可以使用Facade模式定义系统的每一层的入口,如果层与层之间是相互依赖的,则可以限定他们仅通过Facade进行通信,从而简化了层与层之间的依赖关系。 public class Computer { pub ...
通常来讲,工厂模式分为:简单工厂模式,工厂方法模式和抽象工厂模式。 简单工厂模式定义一个factory类,来根据要求,创建不同的对象。有人说这种模式当有了新一种产品的时候,就要修改factory类,违反了OCP原则。但我感觉如果client传递对应的class的话,可以避免这个弊端。例如: public interface Product { } public class Bus implements Product { public Bus(){ System.out.println("This is a bus!"); } } pub ...

单例模式

主类: public class TheKing { private static TheKing king = null; private TheKing() { } public static TheKing getInstance() { if (king == null) { king = new TheKing(); return king; } else { return king; } } public void sayName() { System.out.println(king); ...

AOP

    博客分类:
  • java
面向切面编程:Aspect Oriented Programming public interface IAop { void before(Object object); void after(Object object); } public class Aop implements IAop { @Override public void after(Object object) { System.out.println("调用前拦截"); } @Override public void before ...
定义      代理模式(Proxy Pattern), 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下 ,一个客户不 想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。      代理模 ...
策略模式(Strategy Pattern)属于行为型模式,其中体现了两个基本面向对象设计的基本原则: 1,封装;2,接口. 他的实现需要:一个接口,多个具体实现该接口的类,一个环境,一个客户端。 优点:   1、 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。   2、 避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。   3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。 缺点:   1、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。 应用场景:     1、 多个类只区别在表现行 ...
Global site tag (gtag.js) - Google Analytics