- 浏览: 66300 次
- 性别:
- 来自: 广州
最新评论
-
piaoxue_x:
嗯,很好,谢谢了。对我没什么,帮助,不过为了积分,啰嗦两句…… ...
继承类的@Transactional---转
文章列表
设计注意的问题2--《Java与模式》
- 博客分类:
- 设计模式
接口隔离原则
该原则讲的是:使用多个专门的接口比使用单一的总接口要好。
合成/聚合复用原则
就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
这个原则更短表述:要尽量使用合成/聚合,尽量不要使用继承。
合成和聚合均是关联的特殊关系。聚合(Aggregation)用来表示“拥有”关系或整体与部分关系;而合成(Composition)则用来表示一种强得多的“拥有”关系。在一个合成关系里,部分和整体的生命周期是一样的。一个合成的新的对象完全拥有对其组成部分的支配权,包括它们的创建和湮灭等。即组合而成的新对象对组成部分的内存分配、内 ...
1:系统设计应该达到的目标
1)可扩展性-Extensibility:新的性能可以很容易地加入到系统中去。
2)灵活性-Flexibility:可以允许代码修改平稳地发生,而不会波及到很多其他的模块,这
就是灵活性
3)可插入性-Pluggability:可以很容易地将一个类抽出去,同时将另外一个有同样接口的类
加进来。
做到这几点关键是恰当地提高软件的可维护性和可复用性。
设计原则包括:
1)“开-闭”原则 OCP
2)里氏代换原则 LSP
3)依赖倒转原则 DIP
4)接口隔离原则 ISP
...
第二种是登记形式的原型模式
原型管理器角色保持一个聚集,作为对所有原型对象的登记,这个角色提供必要的方法,供外界增加新的原型对象和取得已经登记过的原型对象。
深拷贝,有两种方式实现:
1:拷贝对象时,递归地调用属性对象的克隆方法完成。
2:如果类实现了java.io.Serializable接口,把原型对象序列化,然后反序列化后得到的队形,其实就是一个新的深拷贝对象。
使用原型模式有以下优点:
1:创建大的聚合对象图时,没必要为每个层次的子对象创建相应层次的工厂类。
2:方便实例化,只要复制对象,然后初始化对象,就可以得到你想要的对象,并不需要要过多的编程。
下面内容摘自《java与模式》
如果每个抽象产品都有多于一个的具体子类,那么抽象工厂就可以提供多个具体工厂角色,分泌对应于相应的具体产品角色,即每个具体工厂类负责创建抽象产品的某个具体子类的实例。
“抽象工 ...
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么,这样,客户就从具体的产品被解耦了。类图如下
工厂方法和抽象工厂的区别:
工厂方法使用的是继承,意味着利用工厂方法创建对象,需要扩展一个类,并覆盖它的工厂方法。这个工厂方法就是用来创建对象的。该模式就是通过子类来创建对象,用这种做法,客户只需要知道他们所使用的抽象类型就可以了,而由子类来负责决定具体类型,即只负责客户从具体类型中解耦。
抽象工厂通过对象组合来实现。它提供一个用来创建一个产品家族的抽象类型,这个类型 ...
这部分是摘自《head first设计模式》
所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到对象创建的过程封装的目的。组成元素有创建类和产品类
正式定义:
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
工厂方法模式能够封装具体类型的实例化。如下图,抽象的Creator提供了一个创建对象的方法的接口,也成为“工厂方法”。在抽象的Creator中,任何其他市县的方法,都可以使用到这个工厂方法所制造出来的产品,但只有子类真正市县这个工厂方法并创建产品。
工厂方法模式是类得创建模式,又叫虚拟构造函数模式或者多态性工厂(Polymorphic Factory)模式。用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
抽象产品角色仅仅作为具体产品角色提供一个共同的类型而已,故可以用一个标识接口实现,即该接口是没有声明任何方法的。
客户端只需声明抽象工厂和抽象产品的变量即可,然后new具体的工厂和产品
工厂方法返还的应当是抽象类型,而不是具体类型,只有这样才能保证针对产品的多态性。换言之,调用工厂方法的客户端可以针对抽象编程,依赖于一个抽象产品类型,而不是具体产品类型。
工厂对象应当有一个抽象的超类型。换言之,应当有 ...
简单工厂模式是类得创建模式,又叫静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类得实例。
工厂模式的几种形态
书中的例子是以水果为例,Fruit是接口,Apple/grape/strawberry是具体实现类;园丁FruitGardner是工厂,根据客户指定的种类生成具体的Fruit实现,返回的是Fruit类型
简单工厂模式就是由一个工厂类根据传入的参量决定创建哪一种产品的实例。
抽象产品角色的主要目的是给所有的具体产品类提供一个共同的类型,在最简单的情况下,可以简化为一个标识接口,即没有声明任何方法的空接口。
单 ...
定义
类图
如果为每个类创建一个工厂方法类会引起工厂类的泛滥,这时可以使用静态工厂方法来避免,在每个类里实现一个静态的工厂方法,就不需要额外的工厂类了。
见 静态工厂方法模式
如果要保证系统里一个类最多只能存一个实例时,就需要单例模式
1)最简单的单例
2)延迟创建
延迟实例化单例对象(static属性在加载类时就会被初始化),即在第一次使用该类的实例时才实例化
public class UnThreadSafeSingleton{
private static UnThreadSafeSingleton = null;
public static UnThreadSaceSingleton getInstance(){
if(instance==null){
instan ...
来自《Head.First.设计模式》
闭包实际上就是一个匿名函数,它可被当成参数传递,相当于C的函数指针。即当把闭包赋给一个变量时,意味着把它绑定到了一个名字,这个时候闭包实际上就是一个有名函数了。