设计模式基础知识
设计模式(狂胜) 看到第8集

设计模式简称:GOF23(由4人帮发明)
学习设计模式的意义

设计模式的基本要数
1.模式名称 2.解决的问题 3解决方案 4.产生的效果
OOP的7大原则

工厂模式
  
简单工厂模式

如果增加一个产品的话,你必须对代码进行修改。不满足开发闭合原则
代码
在这里插入代码片
工厂方法模式

需要创建多个工厂(每增加一个产品都会新增一个工厂) 好处:不会对原代码进行修改;满足开放闭合原则 缺点:如果新增的产品过多的话,会出现很多的类;代码过度冗余。
在这里插入代码片
抽象工厂模式
创建工厂的工厂
  
这里是引用
在这里插入代码片
建造者模式


原型模式
浅克隆  深克隆 
@Override
public Object clone() throws CloneNotSupportedException{
Object obj=super.clone();
Video_1 v=(Video_1)obj;
v.createtime=(Date)this.createtime.clone();
return v;
}
结构型模式
适配器模式
  
桥接模式
    
代理模式
静态代理
   
动态代理
实现机制:使用反射 角色和静态代理一样 3种实现方式:1.基于接口 (JDK动态代理) 2.基于类 (cglib)、3.javasist(java字节码实现)
关键代码
package com.hjx.Proxy.dynamic;
import com.hjx.Builder.demo2.Product;
import com.hjx.Proxy.demo1.Rent;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyInvocationHandler implements InvocationHandler {
private Object target;
public void setTarget(Object target) {
this.target = target;
}
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this );
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
seeHouse();
Object result=method.invoke(target,args);
charge();
return result;
}
public void seeHouse(){
System.out.println("看房子");
}
public void charge(){
System.out.println("收费");
}
}
|