自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 Delegation and Inheritance(委派与继承)

委派(Delegation)是指一个对象请求另一个对象的功能,是复用的一种常见模式。一个简单的委派实例:在此例中,B类将foo()方法委派给A,让A的一个实例a来实现该方法。由此可见,委派模式通过运行时动态绑定,实现对其他类中代码的动态复用。委托依赖于动态绑定,因为它要求给定的方法调用可以在运行时调用不同的代码段。//这里实现动态绑定//这里进行功能委派LoggingList由一个List组成,并将(非日志记录)功能委托给该List。

2023-04-22 22:44:19 316 1

原创 LSP原则、逆变与协变

在上述示例中,父类型为T,子类型为S,由T到S,方法a()的返回值类型由Object变成String,参数越来越具体;b()抛出异常的类型由Throwable变为IOExpection,同样比上一级更具体。子类实现相同的不变量(以及附加的不变量),被重写的方法具有相同的前置条件和后置条件,符合LSP原则。实际上在Java中是不允许出现这种情况的,目前Java中遇到这种情况,当作overload看待。start()的前置条件变弱,brake()的后置条件变强,符合LSP原则。子类型可以增加方法,但不可删除;

2023-04-22 20:19:38 62

原创 面向对象(OO)设计的五个原则:SOLID

通过分解,将两个无关的责任分离开来,分别放置在两个类中:Geometric Rectangle类负责计算面积,Rectangle类负责在GUI上绘图。扩展模块行为的一般途径是修改模块的内部实现,如果一个模块不能被修改,那么它通常被认为是具有固定的行为。在Rectangle类中,既包含GUI的绘图功能draw(),又包含计算面积的area(),这种设计违反了SRP。:模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化。抽象的模块不应依赖于具体的模块,具体应依赖于抽象。一个类负责一个责任。

2023-04-22 10:58:58 67

原创 4-17一道小题

其中,c与c之间是三个空格,d与d之间是两个空格,e与e之间是一个空格,以此类推。若遇到z则下一个字符为a。

2023-04-17 16:51:22 67 4

原创 软件构造:对设计模式的理解(下)

而不是写死在代码里,例如在对一个列表进行排序时,可以使用不同的方法排序:冒泡排序、插入排序、快速排序等等,这时可以采用策略模式,为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。方法:让自己的集合类实现Iterable接口,并实现自己的独特Iterator迭代器(hasNext, next, remove),允许客户端利用这个迭代器进行显式或隐式的迭代遍历。几个客户端共享相同的算法,但在细节上有所不同,即一个算法由可定制的部分和不变的部分组成。

2023-04-16 19:00:22 78 5

原创 软件构造:对设计模式的理解(上)

有一个显示矩形的程序,LegacyRectangle中的display()方法接受左上角坐标(x, y),宽(w),高(h)四个参数来实现功能,但是客户端想要通过传递左上角和右下角的坐标来实现功能;当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。假设要为对象增加不同侧面的特性,那么就可以通过装饰器模式来解决,为每一个特性构造子类,通过。这就要求客户端在创建对象时必须指明具体的类,如果有了新的具体类添加时,客户端的代码很可能也要修改;

2023-04-16 15:03:10 165 10

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除