绪论
其实很早以前就看过一些关于设计模式的文章,知道这个很重要,为此还写了一些demo,但是在实际开发过程中基本没有使用过。原因:不习惯,不记得,其实更多的是不明白什么情况下可以使用。所以导致自己的代码又臭又长,还会重复的造一些轮子,使代码看起来毫无亮点。
这次学习设计模式,更多的是分析理解,思考以往编程中哪些地方可以用到这些模式,从而可以使以后的自己在开发相同模块时可以使用。
理解
- 创建型模式。
- 构建与表示分离,使得同样的构建过程可以创建不同的表示。
- 优点:易于解耦、精确控制对象的创建、易于扩展。
- 缺点:产品之间差异性很大不适合使用、产品内部变化复杂,会导致系统变得很庞大。
代码
Builder.java
public interface Builder {
// 流量
void flow();
// 通话时长
void talkTime();
// 短信数量
void messageNum();
// 价格
void price();
}
Director.java
public class Director {
// 组合
public void combination (Builder builder) {
builder.talkTime();
builder.messageNum();
builder.flow();
builder.price();
}
}
SetMealBuilder_A.java
/**
* A套餐
*/
public class SetMealBuilder_A implements Builder {
@Override
public void flow() {
System.out.println("流量总量:100M");
}
@Override
public void talkTime() {
System.out.println("通话时长:100分钟");
}
@Override
public void messageNum() {
System.out.println("短信数量:100条");
}
@Override
public void price() {
System.out.println("套餐价格:18元\n");
}
}
SetMealBuilder_B.java
/**
* B套餐
*/
public class SetMealBuilder_B implements Builder {
@Override
public void flow() {
System.out.println("流量总量:500M");
}
@Override
public void talkTime() {
System.out.println("通话时长:300分钟");
}
@Override
public void messageNum() {
System.out.println("短信数量:150条");
}
@Override
public void price() {
System.out.println("套餐价格:28元\n");
}
}
Main.java
public class Main {
public static void main(String[] args) {
System.out.println("------A 套餐------");
SetMealBuilder_A setMeal_A = new SetMealBuilder_A();
Director director_A = new Director();
director_A.combination(setMeal_A);
System.out.println("------B 套餐------");
SetMealBuilder_B setMeal_B = new SetMealBuilder_B();
Director director_B = new Director();
director_B.combination(setMeal_B);
}
}
结果
这个组合模式让我想起了移动的每月套餐,虽然内容种类基本一样,由于通话时长、流量、短信数量等的不同,每个套餐价格不同,但是组合模式是一样的。
还有肯德基的套餐和这都差不多。
(若有什么错误,请留言指正,3Q)