当先锋百科网

首页 1 2 3 4 5 6 7

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个不同对象,内容一样,但是是浅克隆
在这里插入图片描述
在这里插入图片描述
一个修改,另外一个也跟着修改;
在这里插入图片描述
咦,为什么是深克隆,只有一个变了,我又去尝试了其他类型,如日期:
在这里插入图片描述
还是深克隆。?????????