设计模式系列
1、组合模式
2、策略模式
3、单例模式
4、原型模式
5、模板模式
6、观察者模式
7、享元模式
8、装饰着模式
9、门面模式
10、责任链模式
11、建造者模式
12、适配器模式
什么是设计模式
设计模式是一种解决方案,是最佳实践,也是程序员们在开发过程中的一般的解决方案。其实开发中你碰到的问题,以及被前辈们碰到过很多次了,并且也比较完美的解决了此类问题并且总结了经验和教训,我们就需要把这些经验和教训学习到手,然后熟练应用到我们的开发过程中。所以什么是设计模式,我的理解就是前辈们总结出来的一套一套的在封装、继承、多态性的基础上总结的灵活的、可扩展的编码套路。
码云地址:去看源码
一:建造者模式
构建者模式(一)
建造者,见名知意,即构建所用对象者,如何构建,以一个简单对象一步步构建成为一个复杂对象,而我们之前一直用关键词来 new 出来一个对象则显得较为简单而且不能灵活用之。而精心设计出来的构建者,则可以一步步构建最终为我们所用的最好的对象,功能强大而且可以灵活应用。
示例代码如下:
1、定义 ProductBuilder 接口
定义一个 interface, 以便于后面动态灵活调用构建对象,并且提供 builder() 方法以便构建具体对象。
interface ProductBuilder{
void setName(String name);
void setAge(int age);
void setAddress(String address);
ProductBuilder builder();
}
2、定义 DefaultProduct 类
DefaultProduct 类实现 ProductBuilder 接口,重写最关键的 builder() 方法。
class DefaultProduct implements ProductBuilder{
private String name;
private int age;
private String address;
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setAge(int age) {
this.age = age;
}
@Override
public void setAddress(String address) {
this.address = address;
}
@Override
public ProductBuilder builder() {
//do something
return new DefaultProduct(this.name, this.age, this.address);
}
}
3 测试类
在测试类中,主要是调用了构建者的 builder() 方法进行构建出一个我们想要的对象,在 builder() 方法中可以实现具体我们在构建出来的对象中特有的逻辑或者是业务。
public class BuilderTest {
public static void main(String[] args) {
ProductBuilder productBuilder = new DefaultProduct("acai", 25, "earth");
System.out.println(productBuilder.builder());
}
}
构建者模式(二)
相对于 构建者模式(一),第二种构建者主要区别在于灵活的调用属性方法已完成对象的构建。
代码如下:
1、定义 Product 对象
为了方便连续调用,每个对象方法都返回 this 对象,也就是对象本身以便调用其他方法。
class Product{
private String name;
private int age;
private String address;
public Product setName(String name){
this.name = name;
return this;
}
public Product setAge(int age){
this.age = age;
return this;
}
public Product setAddress(String address){
this.address = address;
return this;
}
}
2、构建测试类
连续调用属性方法设置值,只需要设置我们需要的属性即可。
public class BuilderTestV2 {
public static void main(String[] args) {
Product product = new Product().setName("acai").setAge(25).setAddress("earth");
System.out.println(product);
}
}
二:适配器模式
适配器模式的作用,就是希望使用现有的类,但是接口的结果不适用于期望的结果,则使用适配器去转换为期望的结果。
1、首先定义一个适配器接口,接口的作用是 把 阿拉伯数字转换成 中文数字。
interface AdapteeNumber{
String strNumber();
}
2、把阿拉伯数字转换成中文数字的具体实现方式如下:
AdapterNumber 实现了把 阿拉伯 数字转换成 中文数字。
class AdapterNumber implements AdapteeNumber{
private String[] chinese_number = new String[]{"一","二","三","四","五","六","七","八","九","零"};
private Number number;
public AdapterNumber(Number number) {
this.number = number;
}
@Override
public String strNumber() {
if(number.getNumber() > 10){
return "没有这么大滴";
}
return chinese_number[number.getNumber() - 1];
}
}
class Number{
private int n;
public Number(int n) {
this.n = n;
}
public int getNumber(){
return n;
}
}
3、测试类
调用 AdapterNumber 适配器类就可以吧 9 转换 成为 九,如果需要转换成 nine, 则重新编写转换英文 nine 的 适配器即可。
public class AdapterTest {
public static void main(String[] args) {
AdapterNumber adapterNumber = new AdapterNumber(new Number(9));
String s = adapterNumber.strNumber();
System.out.println(s);
}
}