列举面向对象设计原则并说明核心思想
1.单一职责
2.开闭原则
3.里式替换原则
4.依赖倒置原则
6.地雷特法则
7.合成复用原则
代理模式的作用
设计模式简介
对某些特定问题的经过实践检查的特定解决方法,应用在Java框架技术中
优点 复用,便于团队交流
GoF(四人组)设计模式
分为23钟
范围目的 | 创建型模式 | j结构型模式 | 行为型模式 |
---|---|---|---|
类模式 | 工厂方法 | (类)匹配器 | 模板方法 解释器 |
对象模式 | 单例 原型 抽象工厂 建造者 | 代理 (对象)适配器 桥接 装饰 外观 享元 组合 | 策划 |
列举面向对象设计原则并说明核心思想
1.一个类应该有且仅有一个引起他变化的原因
2.一个类应该只负责一个职责
1.对扩展开放,对修改关闭
面向抽象接口开发,不面对具体事例类开发
添加实现类,而不是修改类
引用基类的地方必须能透明使用其子类的对象
可以用来判断继承关系是否合理
依赖于抽象而不依赖于具体实现,针对接口编程
1.尽量将庞大的接口拆分成更小的 更具体的接口
2.接口中只包含感兴趣的方法
1.尽可能地于减少其他实体发生互相作用
1.尽量使用组合/聚合的方式,而不是继承关系
2.has-a关系
设计模式的应用
工厂 负责创建所有实例 根据传入的参数
抽象产品
具体产品
1.基于多台,便于对负责逻辑进行封装管理
2.满足开闭原则
缺点复杂
代理模式
静态弊端
增加代码量且不符合开闭原则
1.提供了运行时动态扩展对象行为的能力
2.能够根据给定的业务规则,在运行时生成代理类
核心API
方法 | 介绍 |
---|---|
Object invoke(Object target,Method method,Object[] args) | 用于在代理实例上处理方法调用并返回结果。target代理正在执行方法的对象,正在被调用的接口方法,args传递给接口方法 的参数。 |
static Object newProxyInstance(ClassLoader loader,Class<?>[]interfaces,InvocationHandler h) | 返回一个实现了指定接口的代理实例,对接口方法的调用会被指派掉指定的调用处理程序。loader用来加载动态生成的代理类,h是接口代理方法的调用处理程序,interfaces需要进行代理的接口类型 |
动态代理框架
抽象主题类
public interface Buyer {//抽象主题类
String add();//看房方法
?
}
public class RealBuyer implements Buyer{//真实主题类
代理工厂类 创建一个create方法
import java.lang.reflect.Proxy;
?
public class IntermadiaryJDKProxyFactory {//代理工厂类
public static <T> T create(Object object){
IntermadiaryInvocationHandler handler = new IntermadiaryInvocationHandler();
handler.setTarget(object);
return (T)Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),handler);
}
}
中介代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class IntermadiaryInvocationHandler implements InvocationHandler {//实现代理对象
private Object target;//被代理的对象
?
public void setTarget(Object target) {//调用set方法
this.target = target;
}
测试类
public class Test {
public static void main(String[] args) {
Buyer buyer= IntermadiaryJDKProxyFactory.create(new RealBuyer());
System.out.println(buyer.add());
}
}
原文:https://www.cnblogs.com/gaobangguo/p/14228417.html