技术标签: 23种设计模式
/**
* <p>Title: Sheep.java</p>
* <p>Description: </p>
* <p>Copyright:</p>
* <p>Company:</p>
* @author kansir
* @date 2019��8��15��
* @version 1.0
*/
package com.pro.prototype;
/**
* @Description
* @author kansir
* @version
* @date 2019��8��15�� ����10:49:39
*/
public class Sheep {
@Override
public String toString() {
return "Sheep [name=" + name + ", color=" + color + ", age=" + age + "]";
}
private String name;
private String color;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Sheep(String name, String color, int age) {
super();
this.name = name;
this.color = color;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
/**
* <p>Title: Client.java</p>
* <p>Description: </p>
* <p>Copyright:</p>
* <p>Company:</p>
* @author kansir
* @date 2019��8��15��
* @version 1.0
*/
package com.pro.prototype;
/**
* @Description
* @author kansir
* @version
* @date 2019��8��15�� ����10:51:27
*/
public class Client {
public static void main(String[] args) {
//��ͳ����
Sheep sheep=new Sheep("tom", "��ɫ", 1);
Sheep sheep2=new Sheep("tom", "��ɫ", 1);
Sheep sheep3=new Sheep("tom", "��ɫ", 1);
Sheep sheep4=new Sheep("tom", "��ɫ", 1);
System.out.println(sheep2);
System.out.println(sheep3);
System.out.println(sheep4);
}
}
package com.pro.prototype.improve;
/**
*
* @ClassName: Sheep
* @Description: TODO(这里用一句话描述这个类的作用)
* @author kansir
* @date 2019年8月17日 下午9:48:45
*
*/
public class Sheep implements Cloneable{
private String name;
private String color;
public Sheep getFriend() {
return friend;
}
public void setFriend(Sheep friend) {
this.friend = friend;
}
private int age;
public Sheep friend; //克隆时,对象类型如何处理
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Sheep(String name, String color, int age) {
super();
this.name = name;
this.color = color;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Sheep [name=" + name + ", color=" + color + ", age=" + age + "]";
}
@Override
protected Object clone() {
Sheep sheep=null;
try {
sheep=(Sheep) super.clone();
return sheep;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
public Sheep() {
super();
}
}
/**
* <p>Title: Client.java</p>
* <p>Description: </p>
* <p>Copyright:</p>
* <p>Company:</p>
* @author kansir
* @date 2019��8��15��
* @version 1.0
*/
package com.pro.prototype.improve;
public class Client {
public static void main(String[] args) {
Sheep sheep = new Sheep("tom", "白色", 1);
Sheep sheep6 = new Sheep("jack", "黑色", 2);
sheep.setFriend(sheep6);
Sheep sheep2 = (Sheep) sheep.clone();
Sheep sheep3 = (Sheep) sheep.clone();
Sheep sheep4 = (Sheep) sheep.clone();
Sheep sheep5 = (Sheep) sheep.clone();
System.out.println(sheep2);
System.out.println(sheep3);
System.out.println(sheep4);
System.out.println("sheep5 = " + sheep5 + "sheep6.friend" + sheep5.friend.hashCode());
System.out.println("sheep5 = " + sheep6 + "sheep6" + sheep6.hashCode());
}
}
package com.pro.prototype.deepclone;
public class Client {
public static void main(String[] args) throws CloneNotSupportedException {
DeepProtoType p = new DeepProtoType();
p.setName("宋江");
p.setDeepCloneableTarget(new DeepCloneableTarget("大牛", "牛奶"));
/*
// 方式一 完成深拷贝
DeepProtoType p2 = (DeepProtoType) p.clone();
System.out.println("p.name" + p.getName() + "p.getDeepCloneableTarget().hashCode()"
+ p.getDeepCloneableTarget().hashCode());
System.out.println("p2.name" + p2.getName() + "p2.getDeepCloneableTarget().hashCode()"
+ p2.getDeepCloneableTarget().hashCode());
*/
// 方式二 完成深拷贝
DeepProtoType p2 = (DeepProtoType) p.deepClone();
System.out.println("p.name" + p.getName() + "p.getDeepCloneableTarget().hashCode()"
+ p.getDeepCloneableTarget().hashCode());
System.out.println("p2.name" + p2.getName() + "p2.getDeepCloneableTarget().hashCode()"
+ p2.getDeepCloneableTarget().hashCode());
}
}
package com.pro.prototype.deepclone;
import java.io.Serializable;
public class DeepCloneableTarget implements Serializable, Cloneable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String cloneName;
private String cloneClass;
/**
*
* <p>Title: </p>
* <p>Description: 构造器</p>
* @param cloneName
* @param cloneClass
*/
public DeepCloneableTarget(String cloneName, String cloneClass) {
this.cloneName = cloneName;
this.cloneClass = cloneClass;
}
/**
* 使用默认的克隆即可
*/
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
package com.pro.prototype.deepclone;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class DeepProtoType implements Serializable, Cloneable {
private String name;
private DeepCloneableTarget deepCloneableTarget;
public DeepProtoType() {
super();
}
// 深拷贝,方式一 :使用clone方法
@Override
protected Object clone() throws CloneNotSupportedException {
Object deep = null;
// 完成对基本数据类型和属性的string的克隆
deep = super.clone();
// 对引用类型的属性进行单独处理
DeepProtoType deepProtoType = (DeepProtoType) deep;
deepProtoType.deepCloneableTarget = (DeepCloneableTarget) deepCloneableTarget.clone();
return deep;
}
// 深拷贝,方式二:通过序列化实现(推荐使用)
public Object deepClone() {
// 创建流对象
ByteArrayOutputStream bos = null;
ObjectOutputStream oos = null;
ByteArrayInputStream bis = null;
ObjectInputStream ois = null;
try {
// 序列化
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
oos.writeObject(this);// 将当前对象以对象流的形式输出
// 反序列化
bis = new ByteArrayInputStream(bos.toByteArray());
ois = new ObjectInputStream(bis);
DeepProtoType copeObj = (DeepProtoType) ois.readObject();
return copeObj;
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
bos.close();
bis.close();
oos.close();
ois.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public DeepCloneableTarget getDeepCloneableTarget() {
return deepCloneableTarget;
}
public void setDeepCloneableTarget(DeepCloneableTarget deepCloneableTarget) {
this.deepCloneableTarget = deepCloneableTarget;
}
}
Springboot多数据源配置详解概念配置多数据源使用概念一般来说,我们正常的业务只涉及一个数据源,在特定的业务场景中需要使用多个数据源的情况,就需要配置多个数据源来满足特定的业务需求。本文介绍的是:springboot 整合 dynamic-datasource 来实现多数据源的配置使用。注意:此处可以整合多种不同类型的数据库。配置1、引入 pom 依赖(主要依赖)<dependency> <groupId>com.baomidou</groupId>
一、详情页banner添加动态路由:{ path: '/detail/:id', name: 'Detail', component: Detail }详情页首图:<template> <div class="banner"> <img class="banner-img" src="//img1.qunarzz.com/sight/p0/1809/10/10d6568ad3ad4bb5a3.img.jpg
系统:ubuntu 18.04ros:melodic启动仿真环境roslaunch husky_gazebo husky_playpen.launch安装的ros和husky都正常,但是偏偏没有/scan数据排查了很久后来发现目前版本是21年7月份更新的 0.4.10版本发现之前安装过的 0.4.8的版本是正常的,把旧版本替换新版本即可原本想通过apt安装旧版本,执行 apt-cache madison husky 发现只有0.4.10单版本,没有历史版本,换过 阿...
DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式、诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用例子使读者更进一步了解和认识这些工具。 本文是该系列文章之二,它详细地讲解了 DTrace 的原理。本系列文章之一讲解了 kprobe 的原理、编程接口、局限性和使用注意事项并给出实际使用示例帮助读者
GET请求具有以下的几个特点:GET请求可被缓存GET请求保留在浏览器历史记录中GET请求可被收藏为书签GET请求不应在处理敏感数据时使用GET请求有长度限制GET请求只应当用于取回数据POST请求的特点如下:POST请求不会被缓存POST请求不会保留在浏览器历史记录中POST请求不能被收藏为书签POST请求对数据长度没有要求...
致谢:http://www.cnblogs.com/annt/p/ant003.html前言:OpenCV对图像及视频的处理方便且很专业,对于摄像头的支持也很好,但有个不足就是它虽然具有GUI模块(即highgui),但是实在是很简陋,就连一个按键都无法直接实现(需要借助滚动条实现),这一点难以满足可视化的图像处理的想法;另一方面,Qt作为一个优秀的图形库,在GUI上表现出色,且界面设计可
从网站上获取的信息要保存在本地数据库中,但是保存的过程中数据库的信息都变成了乱码,怎么解决呢?客官听我娓娓道来。首先,保证以下四项的编码都是utf-8:1. 代码2. 数据库连接3. 表的字符集格式4. 插入的数据格式每步的操作如下:1. 保证代码的格式是utf-8,在代码最前面加上这句话# -*- coding:utf8 -*-#首先用于确定编码,加上这
DirectX11 With Windows SDK--11 混合状态 原文:DirectX11 With Windows SDK--11 混合状态前言这一章会着重讲述混合状态,在下一章则会讲述深度/模板状态DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以...
一、集合主要作用:去重关系测试, 交集\差集\并集\反向(对称)差集#!/usr/bin/env python# -*- coding:utf-8 -*-list_1 = [1,4,5,7,3,6,7,9]list_1 = set(list_1)list_2 = set([2,6,0,66,22,8,4])print(list_1,list_2)...
密码必须符合复杂性要求介绍 "密码必须满足复杂性要求" 安全策略设置的最佳做法、位置、值和安全注意事项。参考"密码必须满足复杂性要求" 策略设置确定密码是否必须满足一系列对强密码重要的指南。 启用此策略设置需要密码才能满足以下要求:在更改或创建密码时, 将强制执行复杂性要求。Windows Server 密码复杂性要求中包含的规则属于 Passfilt, 不能直接修改。启用...
题目描述Description 已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。 现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。输入输出格式Input/output输入格式:一个正整数K。输出格式:一个正整数N。...
题目:判断101-200之间有多少个素数,并输出所有素数。 #!/usr/bin/python# -*- coding: UTF-8 -*-#from math import sqrtprime = []flag = Truefor i in range(101, 201): k = int(sqrt(i)) for j in range(2, k + 1): ...