- 浏览: 13046 次
- 性别:
- 来自: 大连
最近访客 更多访客>>
最新评论
-
weishuguangeye:
写的非常好,总结的也非常好!感谢!
初学Java设计模式随记 -- 抽象工厂(Abstract Factory)模式
文章列表
装饰(Decorator)模式又叫包装器(Wrapper)模式。
1. 用意动态地给一个对象添加一些额外的职责。
2. 参与者• 抽象构件(Component):定义一个对象接口,可以给这些对象动态地添加职责。• 具体构件(Concrete Component):定义一个对象,可以给这个对象添加一些职责。• 抽象装饰者(Decorator):持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
• 具体装饰者(Concrete Decorator):向组件添加职责。
3.结构
在阎宏的设计模式中,提到“装饰模式以对客户端透明的 ...
什么是动态代理?
被代理的对象(真实主题(RealSubject))可以在运行时动态改变,需要控制的接口(抽象主题(Subject))可以在运行时改变,控制的方式也可以动态改变,从而实现了非常灵活的动态代理关系。
Java提供了动态代理的实现方法。
在Java的java.lang.reflect库中,提供了下面的三个类来实现动态代理。
Proxy(类): 此类表示代理设置,通常为类型(http、socks)和套接字地址。Proxy 是不可变对象。
InvocationHadler(接口): 可以称为调用处理器,是代理实例的调用处理程序 实现的接口。 每个代理实例都具有一个 ...
代理(Proxy)模式
1. 用意:为其他对象提供一种代理以控制对这个对象的访问。
(给某一对象提供代理对象,并由代理对象控制具体对象的引用. )
2.参与者:
• 抽象主题(Subject): 定义真实主题(Real Subject)和代理(Proxy)的共用接口,这样就在任何使用真实主题(Real Subject)的地方都可以使用代理(Proxy)。
• 真实主题(Real Subject): 定义代理(Proxy)所代表的实体。
• 代理(Proxy):
1)内部含有对真实主题(Real Subject)对象的引用,从而可以操作真实主题(Real Subj ...
原型(Prototype)模式也有叫原始模型模式。
1. 用意:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
2. 参与者:•抽象原型(Prototype): 声明一个克隆自身的接口。•具体原型(Concrete Prototype): ...
本篇内容主要摘取自GoF的设计模式和阎宏的《Java与模式》
单例(Singleton)模式,也叫单件模式。定义如下:(参照GoF设计模式)
1. 用意:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2.参与者:• 单例类(Singleton)— 定义一个getInstance()操作,允许客户访问它的唯一实例。getInstance()是一个类操作(一个静态方法)。— 可能负责创建它自己的唯一实例。
3.结构图:
根据这个定义,客户只能通过Singleton类的getInstance()方法操作访问一个Singleton的实例。
在 ...
建造者(BUILDER)模式又叫生成器(BUILDER)模式。它的定义如下:(参见GoF的设计模式与阎宏的《Java与模式》)
1. 用意:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2. 参与者:
• 抽象建造者(Builder): 为创建一个产品(Prodcut)对象的各个部件指定抽象接口。• 具体建造者(ConcretBuilder):
实现抽象建造者(Builder)的接口以构造和装配该产品的各个部件。 定义并明确它所创建的表示。 提供一个检索产品的接口。
• 导演者(Director):构造一个使用抽象建造者(B ...
抽象工厂(Abstract Factory)模式的定义如下:
1. 用意: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
(Provide an interface for creating families of related or dependent objects without specifying their concrete classes.)
...
工厂方法(Factory Method)模式,又叫做虚拟构造子模式或者多态性工厂模式。
1.用意:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
( Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.)
2.参与者:
• 抽象产品(Product ...
简单工厂(Simple Factory)模式: 又称静态工厂方法模式(Static Factory Method Pattern)。
简单工厂模式并没有被包含在GOF的23种设计模式中。
不过,在阎宏《Java与模式》给出了简单工厂(Simple Factory)模式的定义。
它是工厂模式的一种形态。
1.用意:简单工厂模式就是有一个工厂类根据传入的参量决定创建出那一种产品类的实例。
2.参与者:
抽象产品(Product):定义工厂类的静态工厂方法createProdcut()所创建的对象的接口。
具体产品(Concrete Product):实现抽象产品的接口 ...
利用工厂模式可以将对象的创建过程和使用进行分离(也就是解藕),从而促进了对象创建过程的封装。
在回顾前一篇随记初学Java设计模式随记 -- 工厂模式(Factory Pattern)中例子1和例子4时,可能会有这么几个的疑问:
为什么要有一个抽象产品类?
为什么工厂方法返回的是一个抽象产品类类型?
为什么在客户端调用时,也是通过抽象产品类来定义要产品类对象?
这就是工厂模式中产品类的多态性。
由于具体产品类继承(或实现)自抽象产品类,客户端就不必知道具体产品的真实类型,一样可以得到自己想要的产品。
这种多态性,促进了工厂模式的封装效果,工厂类将创建哪种产 ...
在阎宏《JAVA与设计模式》中 ,工厂模式(Factory Pattern)分为下列几种形态:
1.简单工厂(Simple Factory)模式: 又称静态工厂方法模式(Static Factory Method Pattern).
2.工厂方法(Factory Method)模式:又称多态性(Polymorphic Factory ...
以下摘自《GOF设计模式 可复用面向对象软件的基础》中文版。
我们根据两条准则(表1 - 1 )对模式进行分类。
第一是目的准则,即模式是用来完成什么工作的。
模式依据其目的可分为: 创建型( C r e a t i o n a l )、结构型(
最近在学习设计模式时,发现总是会有一些疑问,有的能找到答案,有的不能找到答案。如下:
1. 在相同的场景下,如果不使用模式,会有什么问题?
2. 使用了模式后,解决了什么问题?还有什么问题没有解决?会不会带来新的问题?
3. 解决同样的问题,是不是只有一种模式可用?
4. 如果有多个模式可以使用,那么,哪一个是最合适的?还是需要结合使用?
5. 相似的模式之间有什么不同?
6. 不同的模式之间有什么联系?
7. 每个设计模式中,有哪些角色?
8. 每个设计模式,都是通过什么技术特点来实现其定义的目的?
9. 每个设计 ...