设计模式的六大原则
-
开闭原则
对扩展开放,对修改关闭。 -
里氏代换原则
任何出现基类的地方都可以用其子类去替换。 -
依赖倒转原则
依赖抽象而不依赖具体实现。 -
接口隔离原则
尽量使用多个隔离的接口而不是单个接口来降低耦合。 -
迪米特法则
一个实体应该尽量少的与其它实体间有任何关系,使得类和模块间相互独立。 -
合成复用原
尽量使用合成/聚合的方式而不是继承来复用原有类的特性功能。
结构型模式
适配器模式
把原有类的功能进行封装,转换成另一个接口的实现。使能通过调用新接口来调用原有类的功能
class Original
public class Original{
public void originalMethod(){
//原始功能实现
}
}
interface Target
public interface Target{
void newMethod();
}
Class Adapter
public class Adapter{
private Original original;
public Adapter(Original original){
this.original = original;
}
@Override
public void newMethod(){
original.originalMethod();
}
}
装饰模式
装饰类和被装饰类实现相同的接口,装饰类通过持有被装饰类的实例来动态增强被装饰类的功能
interface Common
public interface Common{
void commonMethod();
}
Class Source
public class Source implements Common{
@Override
public void commonMethod(){
}
}
class Decorator
public class Decorator implements Common{
private Source source;
public Adapter(Source source){
this.source = source;
}
@Override
public void commonMethod(){
//增强逻辑
......
source.commonMethod();
//增强逻辑
......
}
}
代理模式
代理对象提供一层封装来控制对被代理对象的访问
与装饰模式的实现基本相同,不同点是:装饰模式关注的是对被装饰模式功能的增强,被装饰模式一定会执行。代理模式关注的是对被代理对象的访问控制,被代理模式不一定会执行。
外观模式
通过对一系列复杂有一定关联性的逻辑进行封装,解除他们之间的依赖性,屏蔽底层复杂的细节,对外提供一个统一的简单的接口
例如:回家之后就要把家里的灯打开,空调打开,热水器打开。离开家的时候又要把所有的灯,空调,热水器都关了。
class Light
public class Light{
public void start(){
}
public void stop(){
}
}
class Facader
public class Facader{
Light light;
Conditinor conditionorl
WaterHeader waterHeader;
public Facader(){
light = new Light();
conditionor = new Conditionor();
waterHeader = new WaterHeader();
}
public void start(){
light.start();
conditionor.start();
waterHeader.start();
}
public void stop(){
light.stop();
conditionor.stop();
waterHeader.stop();
}
}
简单记录自己对设计模式相关的理解,便于复习用