一、克隆

1.1 克隆简介

克隆同样也是一种创建对象的方式

1.1.1 克隆的使用条件

已经有了一个对象,对象中也已经有了一些数据。程序需要产生很多类似的对象出来,此时就可以使用克隆

1.1.2 克隆需要使用的一个接口(Cloneable)

  1. package com.woniuxy.java29.bean;
  2. import java.io.Serializable;
  3. import java.util.Date;
  4. public class StudentBean implements Serializable ,Cloneable{
  5. /**
  6. *
  7. */
  8. private static final long serialVersionUID = 8120141337579471011L;
  9. private String name;
  10. private int age;
  11. private String telphone;
  12. private String address;
  13. private int gender;
  14. private Date studyTime;
  15. public int getAge() {
  16. return age;
  17. }
  18. public void setAge(int age) {
  19. this.age = age;
  20. }
  21. public String getTelphone() {
  22. return telphone;
  23. }
  24. public void setTelphone(String telphone) {
  25. this.telphone = telphone;
  26. }
  27. public String getAddress() {
  28. return address;
  29. }
  30. public void setAddress(String address) {
  31. this.address = address;
  32. }
  33. public int getGender() {
  34. return gender;
  35. }
  36. public void setGender(int gender) {
  37. this.gender = gender;
  38. }
  39. public Date getStudyTime() {
  40. return studyTime;
  41. }
  42. public void setStudyTime(Date studyTime) {
  43. this.studyTime = studyTime;
  44. }
  45. public String getName() {
  46. return name;
  47. }
  48. public void setName(String name) {
  49. this.name = name;
  50. }
  51. @Override
  52. public Object clone() throws CloneNotSupportedException {
  53. // TODO Auto-generated method stub
  54. return super.clone();
  55. }
  56. @Override
  57. public String toString() {
  58. return "StudentBean [name=" + name + ", age=" + age + ", telphone=" + telphone + ", address=" + address
  59. + ", gender=" + gender + ", studyTime=" + studyTime + "]";
  60. }
  61. }
  1. package com.woniuxy.java29.study;
  2. import java.util.Date;
  3. import com.woniuxy.java29.bean.StudentBean;
  4. public class MainEnter {
  5. /**
  6. * 主函数
  7. * @param args
  8. */
  9. public static void main(String[] args) {
  10. // TODO Auto-generated method stub
  11. StudentBean studentBean = new StudentBean();
  12. studentBean.setName("张三");
  13. studentBean.setAddress("孵化园5号楼");
  14. studentBean.setAge(18);
  15. studentBean.setStudyTime(new Date());
  16. studentBean.setGender(1);
  17. studentBean.setTelphone("13398195689");
  18. System.out.println(studentBean);
  19. //使用克隆模式产生对象
  20. try {
  21. StudentBean studentBean01 = (StudentBean) studentBean.clone();
  22. studentBean01.setName("李四");
  23. studentBean01.setTelphone("13398567845");
  24. System.out.println(studentBean01);
  25. //克隆模式产生出来的对象,不是源对象
  26. System.out.println(studentBean == studentBean01);
  27. //
  28. StudentBean studentBean02 = (StudentBean) studentBean.clone();
  29. studentBean02.setName("王五");
  30. System.out.println(studentBean02);
  31. } catch (CloneNotSupportedException e) {
  32. // TODO Auto-generated catch block
  33. e.printStackTrace();
  34. }
  35. // //现在需要有10个学生
  36. // StudentBean studentBean02 = new StudentBean();
  37. // studentBean02.setName("张思");
  38. // studentBean02.setAddress("孵化园5号楼");
  39. // studentBean02.setAge(18);
  40. // studentBean02.setStudyTime(new Date());
  41. // studentBean02.setGender(1);
  42. // studentBean02.setTelphone("13398195688");
  43. //
  44. //
  45. // StudentBean studentBean03 = new StudentBean();
  46. // studentBean03.setName("李四");
  47. // studentBean03.setAddress("孵化园5号楼");
  48. // studentBean03.setAge(20);
  49. // studentBean03.setStudyTime(new Date());
  50. // studentBean03.setGender(1);
  51. // studentBean03.setTelphone("13398195686");
  52. }
  53. }

1.2 浅克隆

浅克隆: 对象克隆时没有克隆其关联对象
EG:

    package com.woniuxy.java29.bean;
    import java.io.Serializable;
    import java.util.Date;
    public class StudentBean implements Serializable ,Cloneable{
        /**
         * 
         */
        private static final long serialVersionUID = 8120141337579471011L;
        private String name;
        private int age;
        private String telphone;
        private String address;
        private int gender;
        private Date studyTime;
        private GirlBean girlBean;
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getTelphone() {
            return telphone;
        }
        public void setTelphone(String telphone) {
            this.telphone = telphone;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public int getGender() {
            return gender;
        }
        public void setGender(int gender) {
            this.gender = gender;
        }
        public Date getStudyTime() {
            return studyTime;
        }
        public void setStudyTime(Date studyTime) {
            this.studyTime = studyTime;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public GirlBean getGirlBean() {
            return girlBean;
        }
        public void setGirlBean(GirlBean girlBean) {
            this.girlBean = girlBean;
        }
        @Override
        public Object clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            return super.clone();
        }
        @Override
        public String toString() {
            return "StudentBean [name=" + name + ", age=" + age + ", telphone=" + telphone + ", address=" + address
                    + ", gender=" + gender + ", studyTime=" + studyTime + ", girlBean=" + girlBean + "]";
        }
    }
    package com.woniuxy.java29.bean;
    import java.io.Serializable;
    /**
     * 女朋友类
     * @author Administrator
     *
     */
    public class GirlBean implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = -3631350544025547303L;
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    //    @Override
    //    public String toString() {
    //        return "GirlBean [name=" + name + "]";
    //    }
    }
    package com.woniuxy.java29.study;
    import java.util.Date;
    import com.woniuxy.java29.bean.GirlBean;
    import com.woniuxy.java29.bean.StudentBean;
    public class MainEnter {
        /**
         * 主函数
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            StudentBean studentBean = new StudentBean();
            studentBean.setName("张三");
            studentBean.setAddress("孵化园5号楼");
            studentBean.setAge(18);
            studentBean.setStudyTime(new Date());
            studentBean.setGender(1);
            studentBean.setTelphone("13398195689");
            //
            GirlBean girl = new GirlBean();
            girl.setName("马小蓉");
            studentBean.setGirlBean(girl);
            System.out.println(studentBean);
            //使用克隆模式产生对象
            try {
                StudentBean studentBean01 = (StudentBean) studentBean.clone();
                studentBean01.setName("李四");
                studentBean01.setTelphone("13398567845");
                System.out.println(studentBean01);
                //克隆模式产生出来的对象,不是源对象
                System.out.println(studentBean == studentBean01);
                //
                StudentBean studentBean02 = (StudentBean) studentBean.clone();
                studentBean02.setName("王五");
                System.out.println(studentBean02);
            } catch (CloneNotSupportedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    //        //现在需要有10个学生
    //        StudentBean studentBean02 = new StudentBean();
    //        studentBean02.setName("张思");
    //        studentBean02.setAddress("孵化园5号楼");
    //        studentBean02.setAge(18);
    //        studentBean02.setStudyTime(new Date());
    //        studentBean02.setGender(1);
    //        studentBean02.setTelphone("13398195688");
    //        
    //        
    //        StudentBean studentBean03 = new StudentBean();
    //        studentBean03.setName("李四");
    //        studentBean03.setAddress("孵化园5号楼");
    //        studentBean03.setAge(20);
    //        studentBean03.setStudyTime(new Date());
    //        studentBean03.setGender(1);
    //        studentBean03.setTelphone("13398195686");
        }
    }

执行结果:

    StudentBean [name=张三, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:34:50 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]
    StudentBean [name=李四, age=18, telphone=13398567845, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:34:50 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]
    false
    StudentBean [name=王五, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:34:50 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]

并没有克隆女朋友对象
**

1.3 深克隆

深克隆:对象在克隆本身同时克隆其关联对象
具体做法:
让该关联对象也提供克隆能力,并且学生在克隆时,修改一下克隆逻辑

    package com.woniuxy.java29.bean;
    import java.io.Serializable;
    /**
     * 女朋友类
     * @author Administrator
     *
     */
    public class GirlBean implements Serializable,Cloneable{
        /**
         * 
         */
        private static final long serialVersionUID = -3631350544025547303L;
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public Object clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            return super.clone();
        }
    //    @Override
    //    public String toString() {
    //        return "GirlBean [name=" + name + "]";
    //    }
    }
    package com.woniuxy.java29.bean;
    import java.io.Serializable;
    import java.util.Date;
    public class StudentBean implements Serializable ,Cloneable{
        /**
         * 
         */
        private static final long serialVersionUID = 8120141337579471011L;
        private String name;
        private int age;
        private String telphone;
        private String address;
        private int gender;
        private Date studyTime;
        private GirlBean girlBean;
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getTelphone() {
            return telphone;
        }
        public void setTelphone(String telphone) {
            this.telphone = telphone;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public int getGender() {
            return gender;
        }
        public void setGender(int gender) {
            this.gender = gender;
        }
        public Date getStudyTime() {
            return studyTime;
        }
        public void setStudyTime(Date studyTime) {
            this.studyTime = studyTime;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public GirlBean getGirlBean() {
            return girlBean;
        }
        public void setGirlBean(GirlBean girlBean) {
            this.girlBean = girlBean;
        }
        @Override
        public Object clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            GirlBean girlBean = (GirlBean) this.girlBean.clone();
            StudentBean stu = (StudentBean) super.clone();
            stu.setGirlBean(girlBean);
            return stu;
        }
        @Override
        public String toString() {
            return "StudentBean [name=" + name + ", age=" + age + ", telphone=" + telphone + ", address=" + address
                    + ", gender=" + gender + ", studyTime=" + studyTime + ", girlBean=" + girlBean + "]";
        }
    }
    package com.woniuxy.java29.study;
    import java.util.Date;
    import com.woniuxy.java29.bean.GirlBean;
    import com.woniuxy.java29.bean.StudentBean;
    public class MainEnter {
        /**
         * 主函数
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            StudentBean studentBean = new StudentBean();
            studentBean.setName("张三");
            studentBean.setAddress("孵化园5号楼");
            studentBean.setAge(18);
            studentBean.setStudyTime(new Date());
            studentBean.setGender(1);
            studentBean.setTelphone("13398195689");
            //
            GirlBean girl = new GirlBean();
            girl.setName("马小蓉");
            studentBean.setGirlBean(girl);
            System.out.println(studentBean);
            //使用克隆模式产生对象
            try {
                StudentBean studentBean01 = (StudentBean) studentBean.clone();
                studentBean01.setName("李四");
                studentBean01.setTelphone("13398567845");
                System.out.println(studentBean01);
                //克隆模式产生出来的对象,不是源对象
                System.out.println(studentBean == studentBean01);
                //
                StudentBean studentBean02 = (StudentBean) studentBean.clone();
                studentBean02.setName("王五");
                System.out.println(studentBean02);
            } catch (CloneNotSupportedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    //        //现在需要有10个学生
    //        StudentBean studentBean02 = new StudentBean();
    //        studentBean02.setName("张思");
    //        studentBean02.setAddress("孵化园5号楼");
    //        studentBean02.setAge(18);
    //        studentBean02.setStudyTime(new Date());
    //        studentBean02.setGender(1);
    //        studentBean02.setTelphone("13398195688");
    //        
    //        
    //        StudentBean studentBean03 = new StudentBean();
    //        studentBean03.setName("李四");
    //        studentBean03.setAddress("孵化园5号楼");
    //        studentBean03.setAge(20);
    //        studentBean03.setStudyTime(new Date());
    //        studentBean03.setGender(1);
    //        studentBean03.setTelphone("13398195686");
        }
    }

执行结果:

    StudentBean [name=张三, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:39:55 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]
    StudentBean [name=李四, age=18, telphone=13398567845, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:39:55 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@5c647e05]
    false
    StudentBean [name=王五, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:39:55 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@33909752]

结论:对象在克隆时,关联对象也跟着克隆了
**

1.4 总结

克隆:以某一个对象为原型,去产生出与它相似的多个对象
克隆:是属于面向对象设计的一种设计模式: 克隆模式(原型模式)

二、设计原则

一般我们设计我们的程序时,都需要让程序满足一个规则:“高内聚低耦合”

2.1 目的(高内聚,低耦合)

2.1.1 高内聚

程序中的功能点和子程序,尽量功能单一,职责内聚 各司其职

2.1.2 低耦合

程序中的功能(模块)之间,尽量的减少相互之间的关系

2.1.3 实现手段

设计程序时遵循一定的设计原则,以及设计模式

2.2 七大设计原则

设计原则就是程序在设计时,需要遵循的大纲,总体纲领

2.2.1 单一原则

一个类只干一个事(学生类中就只放学生相关的事情),一个方法只干一个事(方法中只做一件事情,便于方法的复用)

2.2.2 开闭原则

程序中,如果有新需求,我们需要做到:对新功能的扩展,我们是开放的;但是对旧功能的修改是关闭的。

2.2.3 接口隔离原则

也叫接口最小化原则,要求我们在设计接口时,接口中的方法尽量少。
也就是说:设计接口时,不要把乱七八糟的方法,都定义在同一个接口中,因为你的实现类可能并不需要

2.2.4 依赖倒置原则

面向接口编程,也叫面向抽象编程;模块之间,不要采用面向细节的编程方法,需要使用面向接口的编程方法,因为细节容易变化,接口不容易变化

2.2.5 里氏替换原则

龙生龙,凤生凤,老鼠的儿子会打洞。 要求保证继承体系的纯洁性。
具体的做法:子类在继承父类的时候,不要去重写父类已经实现过的方法!
可以重写没实现过的方法,也可以扩展新的方法!

2.2.6 迪米特法则

最少知道原则,一个类中尽量不要去关注其他类的事务。如果要关注:方法的参数,方法的返回,某些成员变量

2.2.7 组合聚合原则

程序中,如果存在重复代码的需要使用的情况下,能不用继承,就不用继承。因为
继承破坏了封装的概念,而且会子类存在越来越多的方法。
此时的解决方案:将需要的使用的那个类, 作为本类的成员变量,就可以调用它的行为了!

三、设计模式

在具体编程时,需要采用什么样的方法,或是方式,才可以达到上述的纲领
前辈总结出来的方法,方法多少个:21个
在毕业之前需要掌握什么?
1、克隆模式
2、单例模式
3、工厂模式
4、代理模式
5、观察者模式
6、适配器模式

四、jar

Java一般的压缩格式:jar war 类似于 == zip rar

4.1 如何压缩

24 - 克隆,设计原则,设计模式,jar包 - 图1
24 - 克隆,设计原则,设计模式,jar包 - 图2
24 - 克隆,设计原则,设计模式,jar包 - 图3
效果如图:
**24 - 克隆,设计原则,设计模式,jar包 - 图4

4.2 启动Jar

第一种方式:配置了环境变量的情况,可以双击它
第二种方式:使用DOC命令窗体,启动它
首先,要DOC命令窗体(快捷方式:SHIFT + 右键 选择:“从此处打开命令窗体”)
然后,在命令窗体中,输入命令:java -jar *.jar 直接回车运行即可
24 - 克隆,设计原则,设计模式,jar包 - 图5

4.3 War

即JAVA编写的WEB工程的压缩包