`

构造型模式

 
阅读更多
Builder(生成器)模式

Factory Method(工厂方法)模式

意图:用于创建对象的接口,同时控制对哪个类进行实例化。


Abstract Factory(抽象工厂)模式

意图:创建一系列相互关联或相互依赖的对象。

Prototype(原型)模式

prototype模式不通过实例化类来创建一个新的未初始化的实例,而是通过复制一个现有对象来生成新的对象。


浅拷贝
public class PackageInfo implements Cloneable {
    private Long id;
    private String receiverName;
    private String receiverAddress;
    private String senderName;
    private String senderPhoneNo;

    //other fields, getters, setters and other methods...


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getReceiverName() {
        return receiverName;
    }

    public void setReceiverName(String receiverName) {
        this.receiverName = receiverName;
    }

    public String getReceiverAddress() {
        return receiverAddress;
    }

    public void setReceiverAddress(String receiverAddress) {
        this.receiverAddress = receiverAddress;
    }

    public String getSenderName() {
        return senderName;
    }

    public void setSenderName(String senderName) {
        this.senderName = senderName;
    }

    public String getSenderPhoneNo() {
        return senderPhoneNo;
    }

    public void setSenderPhoneNo(String senderPhoneNo) {
        this.senderPhoneNo = senderPhoneNo;
    }

    public PackageInfo clone() {
        try {
            return (PackageInfo)super.clone();
        } catch (CloneNotSupportedException e) {
            System.out.println("Cloning not allowed.");
            return null;
        }
    }


    public static PackageInfo clonePackage(String userName) {
        //load package as prototype data from db...
        PackageInfo prototype = loadPackageInfo(userName);

        //clone information...
        prototype = prototype.clone();

        //initialize copied data...
        prototype.setId(null);

        return prototype;
    }

    //Simulate loading data from database
    private static PackageInfo loadPackageInfo(String userName) {
        PackageInfo packageInfo = new PackageInfo();

        //create a String object in jvm heap not jvm string pool
        packageInfo.setId(100l);
        packageInfo.setReceiverName("John");
        packageInfo.setReceiverAddress("People Square,Shanghai");
        packageInfo.setSenderName("William");
        packageInfo.setSenderPhoneNo("12345678901");
        return packageInfo;
    }
}
public class PackageInfoTestDrive {
    public static void main(String[] args) {
        PackageInfo currentInfo = PackageInfo.clonePackage("John");
        System.out.println("Original package information:");
        display(currentInfo);

        currentInfo.setId(10000l);
        currentInfo.setReceiverName("Ryan");
        currentInfo.setReceiverAddress("People Square, Shanghai");

        System.out.println("\nNew package information:");
        display(currentInfo);
    }

    private static void display(PackageInfo currentInfo) {
        System.out.println("Package id: " + currentInfo.getId());
        System.out.println("Receiver name: " + currentInfo.getReceiverName());
        System.out.println("Receiver address: " + currentInfo.getReceiverAddress());
        System.out.println("Sender name: " + currentInfo.getSenderName());
        System.out.println("Sender Phone No.: " + currentInfo.getSenderPhoneNo());
    }
}

深拷贝(Deep Copy)
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class DeepCopyBean implements Serializable {
    private String objectField;
    private int primitiveField;

    public String getObjectField() {
        return objectField;
    }

    public void setObjectField(String objectField) {
        this.objectField = objectField;
    }

    public int getPrimitiveField() {
        return primitiveField;
    }

    public void setPrimitiveField(int primitiveField) {
        this.primitiveField = primitiveField;
    }

    public DeepCopyBean deepCopy() {
        try {
            ByteArrayOutputStream buf = new ByteArrayOutputStream();
            ObjectOutputStream o = new ObjectOutputStream(buf);
            o.writeObject(this);

            ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buf.toByteArray()));
            return (DeepCopyBean) in.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}
public class DeepCopyBeanTestDrive {
    public static void main(String[] args) {
        DeepCopyBean originalBean = new DeepCopyBean();

        //create a String object in jvm heap not jvm string pool
        originalBean.setObjectField(new String("123456"));
        originalBean.setPrimitiveField(2);

        //clone this bean
        DeepCopyBean newBean = originalBean.deepCopy();

        System.out.println("Primitive ==? " + (newBean.getPrimitiveField() == originalBean.getPrimitiveField()));
        System.out.println("Object ==? " + (newBean.getObjectField() == originalBean.getObjectField()));
        System.out.println("Object equal? " + (newBean.getObjectField().equals(originalBean.getObjectField())));
    }
}



Memento(备忘录)模式

意图:为对象提供状态存储和状态恢复功能。

  • 大小: 51 KB
分享到:
评论

相关推荐

    用现实世界的认识去理解抽象的设计模式

    构造型模式关注对象的创建和组合,行为模式关注对象的行为和交互,结构型模式关注对象的结构和组织。 构造型模式 构造型模式解决对象的创建问题,包括简单工厂模式、工厂方法模式、抽象工厂模式、创建者模式、原型...

    设计模式PPT

    设计模式是软件开发中的一种...- **构造型模式**:包括生成器模式、工厂方法模式、抽象工厂模式,它们主要用于对象的创建和组装。 通过理解和掌握这些设计模式,开发者可以构建出更加健壮、灵活和易于维护的软件系统。

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第14章 构造型模式介绍 130 第15章 构建者(builder)模式 134 第16章 工厂方法(factory method)模式 141 第17章 抽象工厂(abstract factory)模式 148 第18章 原型(prototype)模式 158 第19章 备忘录(memento)模式 163...

    java设计模式 创建型 构造型 行为型

    构造型 用于帮助将多个对象组织成更大的结构。如,适配器模式、桥接模式、组合器模式等。 行为型 用于帮助系统间对象的通信,以及如何控制复杂系统中的流程。如,命令模式、解释器模式、迭代器模式等。

    设计模式学习笔记--Flyweight享元模式.docx

    享元模式是一种设计模式,属于构造型模式,其主要目的是减少对象的数量,通过共享大量相似对象的内部状态来节省内存。这种模式在处理大量细粒度对象时特别有用,能够有效地提高系统的性能。 享元模式的核心是...

    基于构造型神经网络的异常模式发现方法.pdf

    【基于构造型神经网络的异常模式发现方法】 异常检测是数据分析中的重要环节,尤其是在数据流环境中,由于数据的实时性和连续性,异常检测对于及时识别潜在的问题和威胁至关重要。构造型神经网络(Constructive ...

    Java23种设计模式 (2).docx

    这份文档详细介绍了23种设计模式,分为三大类:创立型模式、构造型模式和行为型模式。 1. **创立型模式**: - **工厂方法模式**:允许将对象的创建过程延迟到子类中,使得子类可以决定实例化哪个类的对象,提高了...

    由浅入深学工厂模式.doc

    例如,可以从构造型模式的简单模式开始,如工厂模式,然后再逐步学习更复杂的模式。 在介绍工厂模式前,文档提到了两个预备知识:向上转型(Upcasting)和多态。向上转型是指将派生类对象当作其基类对象使用,这是...

    uml模式与应用.rar

    - **构造型模式**:描述如何组合简单的元素形成复杂的系统结构,如组合模式、装饰模式。 - **包模式**:处理系统组件的分组和依赖关系,如模块化模式。 3. **UML模式的应用** - **需求分析**:用例图可以帮助...

    Java的23种设计模式疯狂Java总结.doc

    2. **构造型模式**:关注对象的组合和结构,通过组合不同的对象形成新的对象。包括: - **适配器模式**:将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ...

    Java23种设计模式总结.doc

    **构造型模式**: 1. **适配器模式**:使两个不兼容的接口能够协同工作。它将一个类的接口转换成客户希望的另一个接口。 2. **桥接模式**:将抽象部分与实现部分分离,使它们可以独立变化。它是一种结构型的复合模式...

    计算机科学技术系实验室实验项目总表.pdf

    * 构造型模式与生成器模式:介绍设计模式的构造型模式和生成器模式,包括构造型模式的应用、生成器模式的应用等。 面向对象程序设计 * 类的定义与建立对象:介绍面向对象程序设计的基本概念和技术,包括类的定义、...

    Java23种设计模式.docx

    2. 构造型模式: - 适配器(Adapter):将不兼容的接口转换为客户期望的接口,使原本无法一起工作的类可以协同工作。 - 桥接(Bridge):将抽象部分与其实现部分分离,使它们可以独立变化。 - 组合(Composite)...

    设计模式-2020-11-25-巫政霖1

    构造型模式: 工厂模式:隐藏构造细节通过new的方式构建对象,相当于调用者多知道了一个类,增加了类与类之间的联系。工厂模式就是用来封装构建过程的简单工厂模式,承担了构建所有对象的职责,变成了超级类。每一...

    基于仿生模式识别的构造型神经网络分类方法.pdf

    【基于仿生模式识别的构造型神经网络分类方法】是一种创新的神经网络构造技术,它借鉴了生物界中同类事物的渐变模式理论,应用于神经网络的构建与分类任务。该理论认为,即使同类事物之间存在微小差异,它们依然共享...

    基于仿生模式识别的构造型神经网络分类方法分析.pdf

    《基于仿生模式识别的构造型神经网络分类方法分析》 本文主要探讨了一种创新的神经网络构造策略,该策略借鉴了仿生模式识别理论,旨在优化神经网络的分类性能。仿生模式识别理论认为,同类但不完全相同的事物之间...

    软件工程软件体系结构PPT学习教案.pptx

    设计模式是构造型模式、结构型模式、行为型模式等。框架是另一种研究和构造软件体系结构的方法,更多的是关于应用领域问题的已建立的系统结构。 计算机硬件体系结构分类包括SISD单指令流单数据流计算机、SIMD单指令...

Global site tag (gtag.js) - Google Analytics