为何学习设计模式:
知道OO(面向对象)的基础概念(封装、抽象、继承、多态),不等于能够自动设计出弹性的、可复用的、可维护的系统。设计模式是人们在不断运用OO所总结出来的经验。
设计模式比库的等级更高。设计模式告诉我们如何组织类和对象以解决某种问题。
设计模式的三原则:
1. 面向接口编程,而非实现;
2. 多用组合,少用继承;
3. 高内聚、低耦合;
一、策略设计模式的定义
策略设计模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
案例:Duck
二、观察者模式
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
三、装饰者模式
装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
关键点:装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。
四、工厂模式
所有的工厂模式都是用来封装对象的创建。
4.1 简单工厂模式
简单工厂其实不是一个设计模式,反而比较像是一种编程习惯。
/**
* 简单工厂
* @Date 2019-06-02
* @Author lifei
*/
public class SimplePizzaFactory {
/**
* 创建pizza
* 简单工厂, 这样做,制作比萨的代码绑定到PizzaStra中,没有弹性
* @param type
* @return
*/
public Pizza createPizza(String type){
Pizza pizza = null;
if (type.equals("cheese")){
pizza = new CheesePizza();
}else if (type.equals("greek")){
pizza = new GreekPizza();
}else if (type.equals("pepperoni")){
pizza = new PepperoniPizza();
}
return pizza;
}
}
/**
* Factory pattern
* @Date 2019-06-02
* @Author lifei
*/
public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory simplePizzaFactory) {
this.factory = simplePizzaFactory;
}
/**
* 制作pizza
* @return
*/
public Pizza orderPizza(String type){
Pizza pizza =null;
// 使用简单工厂创建pizza
/**