一 设计原则的六大原则
1 单一原则(single responsobility principle):一个类只负责一项职责,尽量做到类只有一个行为原因引起变化;
2 里氏替换原则(LSP liskov substitution principle):子类可以扩展父类的功能,但不能改变原有父类的功能
3 依赖倒置原则(dependence inversion principle):面向接口编程
4接口隔离:(interface segregation principle):建立单一接口
5 迪米特原则(open closed LOD):最少知道原则,尽量降低类与类之间的耦合
6关闭原则(open closed principle):用抽象构建构架,用实现扩展原则;
二 设计模式分类
1 根据目的来分:根据模式式用来完成什么工作的划分,可以分为:创建型模式,结构型模式,行为型模式3种。
创建型模式:用于描述怎样创建对象,他的主要特点是将对象的创建与使用分离,GOF中提供了单例,原型,工厂方法,抽象工厂,建造者等5种创建模式;
结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GOF中提供了代理,适配器,桥接,装饰,外观,享元,组合等7种结构模式
行为型模式:用于描述类与对象之间怎样相互协作完成单个对象都无法单独完成的任务,以及怎样分配职责。GOF中提供了模板方法,策略,命令,职责链,状态,观察者,中介者,迭代器,访问者,备忘录,解释器等11种行为型模式
2 根据作用方位分类
根据模式是主要用于类上还是主要用于对象上来分,这种方式可以分为类模式和对象模式两种
类模型:用于处理类和子类之间的关系,这些关系可以通过继承建立,是静态的,在编译的时候便确定下来了。GOF中的工厂方法,(类)配置器,模板方法,解释器属于该模式。
对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时是可以变化的,更具动态性。GOF中除了以上4种,其他的都是对象模式。
三 常用设计模式之单例模式,写出4种实现
单例模式就是该类中只能返回一个实例
单例模式所具备的特点:
- 私有化的构造函数
- 私有的静态的全局变量
- 共有的静态方法
单例模式分为懒汉式,饿汉式,双层锁式:
饿汉式:
public class Singleton1 {
private Singleton1(){};
private static Singleton1 single = new Singleton1();
public static Singleton1 getInstance(){
return single; }}
懒汉式:
public class Singleton1 {
private Singleton1(){}
private static Singleton1 single = null;
public static Singleton1 getInstance(){
if (single==null){
single = new Singleton1();
}
return single;
}
}
双层锁定(线程安全的)
public class Singleton1 {
private Singleton1(){}
private volatile static Singleton1 single ;
public static Singleton1 getInstance(){
if (null==single){
synchronized (Singleton1.class){
if (null==single){
single = new Singleton1();
}
}
}
return single;
}
}//在single中加入关键字volatile,禁止重排序,所有的写(write)操作都将发生在读(read)操作之前