设计模式6要素
A:单一原则:
B: 开闭原则:
C: 里氏替换原则:因此要求子类可以扩展父类的功能,但不能修改父类本身的非抽象方法
D: 依赖倒置原则:要针对接口编程,而不是针对实现编程。多实现单继承
E:接口隔离原则:
1,单例模式
单例设计模式的一般定义:一个类中只允许有一个实例。
实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。
懒汉式:在静态方法 中初始化。时间换空间。(不推荐,时间很重要)
饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)
一般我们对这个类加锁,在变量申明的时候初始化。
static class SingleTon {
private static SingleTon instance;
private SingleTon(){};
public static SingleTon newInstance() {
if(instance==null) {
synchronized (SingleTon.class) {
if(instance==null) {
ins和tance=new SingleTon();
}
}
}
return instance;
}
2,简单的工厂模式(Factory Pattern)
实际用用:配置了一个七牛云上传,和本地上传通过传入不同的参数返回我们想的对象.简单工厂又叫静态工厂,由一个工 厂对象决定创建哪一个产品对象。主要解决接口选择的问题,我们明确地计划不同条件下创建不同实例时。主要是让他制造出我们想要的对象。
优点:
1、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
2、一个调用者想创建一个对象, 就可以了。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
public class 学生工厂 {
public static 学生 getStudent(int type) {
switch (type) {
case 学生类型.学神:
return new 学神();
case 学生类型.学霸:
return new 学霸();
case 学生类型.学弱:
return new 学弱();
case 学生类型.学渣:
return new 学渣();
default:
break;
}
return null;
}
}
3,代理模式(Proxy Pattern)
直接访问代价比较大:比如创建对象的开销很大。
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用
静态代理:
扩展开放我们对原来的接口进行扩展,在有代理类实现这个接口
缺点:我们给每个服务都创建,代理类,工作大。接口一旦改变,代理类也要改变。
动态代理:
在动态代理中我们不再需要再手动的创建代理类,我们只需要编写一个动态处理器就可以了。
真正的代理对象由JDK再运行时为我们动态的来创建
4,适配器设计模式 Adapter
项目中的应用:
使用类适配器模式继承我们定义的一个抽象的类来获取使用的方法(获取当前登录用户的信息)
说明:
某类继承这个适配器,从而实现我们需要实现的方法。对象适配器(常用) 不是继承是实现使用的关联关系代替了继承关系
使用场合:
系统需要使用现有的类,而这些类的接口不符合系统的需要。 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类, 包括一些可能在将来引进的类一起工作。
5,装饰模式设计
装饰模式为已有类动态附加额外的功能就像王者荣耀英雄升级开锁新的技能
A:扩展一个类的功能。
B:动态增加功能,动态撤销。