1 背景回顾
设计模式是一种思维方式,前人总结的最佳实践,也是一种态度,一种进步。
软件过程里面设计模式一共有23种,一般分为3类。即创建型,结构性型,行为型。其中:
****创建型5种: **** 解决了创建对象的烦恼
单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式
结构性型7种: 解决了如何让类组合起来完成复杂的功能
适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式,
行为型11种: 解决了类之间的控制关系。
模版方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,状态模式,策略模式,职责链模式,访问者模式,解释器模式。
如果想要学习并掌握这些设计模式,最好是编码和画图理解。
简单工厂:## 1 背景回顾
设计模式是一种思维方式,前人总结的最佳实践,也是一种态度,一种进步。
软件过程里面设计模式一共有23种,一般分为3类。即创建型,结构性型,行为型。其中:
**创建型5种: ** 解决了创建对象的烦恼
单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式
结构性型7种: 解决了如何让类组合起来完成复杂的功能
适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式,
行为型11种: 解决了类之间的控制关系。
模版方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,状态模式,策略模式,职责链模式,访问者模式,解释器模式。
如果想要学习并掌握这些设计模式,最好是编码和画图理解。
2 原型模式
即如何去复制一个对象,实现方法可以用io流或者内存,但如果用io流,效率不高,所以一般用内存拷贝。
下面实现FileB 去拷贝 FileA,FileA需要实现Cloneable接口才能完成复制:
package com.yang.create.prototype;
public class FileA implements Cloneable{
private String fileName;
private String content;
public FileA(String fileName, String content) {
this.fileName = fileName;
this.content = content;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
测试:
package com.yang.create.prototype;
public class FileB {
public static void main(String[] args) throws CloneNotSupportedException {
FileA fileA = new FileA("goog", "aaaa.............aaa");
FileA fileB = (FileA)fileA.clone();
System.out.println(fileA.hashCode());
System.out.println(fileA.getContent());
System.out.println(fileB.hashCode());
System.out.println(fileB.getContent());
}
}
结果:
2个不同对象,内容一样,但是是浅克隆
一个修改,另外一个也跟着修改;
咦,为什么是深克隆,只有一个变了,我又去尝试了其他类型,如日期:
还是深克隆。?????????