Luckylau's Blog

Keep Moving, Keep Learning


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索
close
Luckylau's Blog

设计模式之桥接模式

发表于 2022-04-23 | 分类于 java

​ 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

桥接模式的使用场景:

1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

2.对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

3.一个类存在两个独立变化的维度,且这两个维度都需要进行扩展,就是M x N问题,让M和N自己玩儿。

阅读全文 »
Luckylau's Blog

设计模式之原型模式

发表于 2022-04-10 | 分类于 java

​ 原型模式(Prototype Pattern)用于创建重复的对象,这种类型的设计模式属于创建型模式,与工厂模式类似,不同在于工厂模式通过new的方式创建对象,而原型模式通过复制既有对象的方式创建对象。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。使用原型模式有几点注意事项:

  1. 类本身或其父类必须实现Cloneable接口,并用public的clone()方法覆盖Object的同名方法;
  2. 根据实际情况判断是”浅复制“还是”深复制“,若深复制用序列化方式实现,则类本身或其父类须实现Serializable接口;
  3. 实际开发过程中注意业务逻辑,比如id等成员要保证不重复。
阅读全文 »
Luckylau's Blog

设计模式之建造者模式

发表于 2022-04-10 | 分类于 java

​ 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象,这种类型的设计模式属于创建型模式。建造模式可以将一个复杂对象的内部组成部分,与该对象本身的创建分离开来,从而使得复杂对象的组装更灵活。

例如我们用Builder方式构建一个对象

阅读全文 »
Luckylau's Blog

设计模式之工厂模式

发表于 2022-04-04 | 分类于 java

​ 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象很好的方式包括简单工厂模式(simple factory)、工厂方法模式(factory method)和抽象工厂模式(abstract factory)。

简单工厂模式

1
2
3
public interface Shape {
void draw();
}
1
2
3
4
5
6
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Draw a rectangle.");
}
}
1
2
3
4
5
6
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println("Draw a triangle.");
}
}
1
2
3
4
5
6
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Draw a circle.");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ShapeFactory {
//使用 getShape 方法获取形状类型的对象
public static Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shapeType.equalsIgnoreCase("TRIANGLE")){
return new Triangle();
}
return null;
}
}
1
2
3
4
5
6
7
8
9
//画矩形时:
Shape r = ShapeFactory.getShape("RECTANGLE");
r.draw();
//画圆形时:
Shape c = ShapeFactory.getShape("CIRCLE");
c.draw();
//画三角形时:
Shape t = ShapeFactory.getShape("TRIANGLE");
t.draw();
阅读全文 »
Luckylau's Blog

阅读书单(9)

发表于 2022-02-01 | 分类于 书籍

2022年-至今

188.《大脑修复术》-姚乃琳

189.《金融思维》-李国平

190.《一往无前》-范海涛

Luckylau's Blog

阅读书单(8)

发表于 2021-12-20 | 分类于 书籍

2021年-2022年(2本书)

188.《痛点:挖掘小数据满足用户需求》-马丁林斯特龙

189.《从工业化到城市化》-徐远

1234…36
Luckylau

Luckylau

人生识字忧患始

215 日志
14 分类
33 标签
GitHub Weibo
© 2017 - 2022 Luckylau
由 Hexo 强力驱动
主题 - NexT.Pisces