记录一下《大花设计模式》的阅读
简单工厂模式
形式
- 工厂类
- 工厂类产出的产品
例子
Class BreadFactory
public static Bread createBread(参数){
根据参数的不同,返回不同的面包
return new Bread();
}
策略模式
定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响使用算法的客户
我的理解–>利用多态
形式:
方法(策略)
例子
Class person{
Food food;
eat(Food food)
}
Class Food{}
Class Bread extends Food{}
Class Milk extends Food{}
客户端需要识别person、food两个类
策略模式与简单工厂模式结合
Class person{
eat(参数){
根据参数的不同先创建(拿出)不同的食物,然后吃
}
}
客户端只需要识别person一个类
单一职责原则
就一个类而言,应该仅有一个引起他变化的原因
使程序 易维护、易拓展、易复用、灵活多样
职责过多,相当于把这些功能耦合在一起,一个职责的变化可能会削弱这个类完成其他职责的能力
开放-封闭原则
软件实体(类,模块,函数)应该可以拓展但不可以修改
对于拓展是开放的,对于修改是封闭的
–> 利用继承实现该原则
依赖倒转原则
1. 高层模块不应该依赖底层模块,两者都应该依赖抽象
2. 抽象不依赖细节,细节应该依赖抽象
里氏代换原则
子类型必须能够替换掉他们的父类型
依赖倒转可以说是面向对象设计的标志,所有依赖终止于抽象类或者接口
装饰模式
动态的给一个对象添加一些额外的职责,比生成子类更加灵活
例子:
class Person(){}
Class Finery(){
Person person
void add(Person person){
给person穿衣服
}
}
class Yifu() extends Finery(){}
Yifu yifu = new Yifu();
yifu.add(new Person());
代理模式
为其他对象提供一种代理以控制对该对象的访问
我的理解 —> 人在海外,提供代理(???这里可能描述不对),国内的朋友可以帮我在国内买房子,代理可以实现跟我相同的功能
应用场景
- 远程代理
- 虚拟代理
- 安全代理
- 智能指引
工厂模式
定义一个用于创建对象的接口,让子类决定实例化哪一个对象。工厂方法使一个类的实例化延时到子类。
工厂模式与简单工厂模式
简单工厂模式添加新的类型方法时需要对工厂类做出修改,违背了开放-封闭原则
形式
工厂模式类似一个父类,对象的创建交给子类来做