十一、迪米特拉原则/最小知识原则
如果两个类直接进行通信,那么这两个类就不能存在关系
调用其他类的方法时,需要第三个类实现转发-->外观类
尽量降低类的访问权限
十二、外观模式
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式
使用高级外观类,管理子类,可以减少子系统之间的依赖
使用外观类做复杂交互
public class ShapeMaker {
private Shape circle;
private Shape rectangle;
private Shape square;
public ShapeMaker() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle(){
circle.draw();
}
public void drawRectangle(){
rectangle.draw();
}
public void drawSquare(){
square.draw();
}
}
十三、建造者模式
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式
可以方便的实现扩展
应用实例: 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"
十四、观察者模式
定义对象间的一种一对多的依赖关系,多个对象同时监听当前对象的主题
主题对象发生变化时,会自动通知依赖它的对象,进行更新
本质:让耦合的双方依赖于抽象,而不是依赖于自己(是抽象耦合的)
一般通过接口进行实现
观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。
十五、抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
缺点:代码臃肿
易于扩展(增加子类/增加颜色,或增加一个特性)
public class AbstractFactoryPatternDemo {
public static void main(String[] args) {
//获取形状工厂
AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
//获取形状为 Circle 的对象
Shape shape1 = shapeFactory.getShape("CIRCLE");
//调用 Circle 的 draw 方法
shape1.draw();
//获取形状为 Rectangle 的对象
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//调用 Rectangle 的 draw 方法
shape2.draw();
//获取形状为 Square 的对象
Shape shape3 = shapeFactory.getShape("SQUARE");
//调用 Square 的 draw 方法
shape3.draw();
//获取颜色工厂
AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");
//获取颜色为 Red 的对象
Color color1 = colorFactory.getColor("RED");
//调用 Red 的 fill 方法
color1.fill();
//获取颜色为 Green 的对象
Color color2 = colorFactory.getColor("Green");
//调用 Green 的 fill 方法
color2.fill();
//获取颜色为 Blue 的对象
Color color3 = colorFactory.getColor("BLUE");
//调用 Blue 的 fill 方法
color3.fill();
}
}