黑大学子在学设计模式(创建型)

1–点击阅读网站教程

2—围观设计模式–作者感悟

3—详细总结

4—工程师总结
创建型模式的主要关注点是“怎样创建对象?”

它的主要特点是“将对象的创建与使用分离”。

单例模式

在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。

J2EE 标准中的 ServletContext 和 ServletContextConfig、Spring 框架应用中的 ApplicationContext、数据库中的连接池等也都是单例模式。

线程安全的单例模式代码示例

简单工厂–静态工厂模式

Animal a=new Dog();
Animal b=new Bird();

当前的背景:

  • 如果每一次想要新生成一个不同的具体的动物,比如说你新生成一个小狗,一只鸟,那么每一次你都需要违反开闭原则(对扩展的开放对修改的关闭),也就是说,每一次想要新生成一个动物的时候,都要手动的去改,将之前那个一个小狗改成一只鸟,这就违反了开闭原则。
  • 第二点是当前的这个动物类,他也已经违反了单一职责,因为它不仅仅是代表着动物封装的那些功能,他又承担了去实例化其他具体动物的功能。

优点:

  • 将具体创造一个动物实例的代码修改为,只需要通过传递参数,就会创。造出具体的实例
  • 而且当前的工厂类符合单一原则 他只负责创建对象 里面没有承担对象功能职责
  • 满足创建型模式中所要求的“创建与使用相分离”的特点

缺点:

  • 违反开闭原则 当新增加产品类型的时候 需要修改工厂接口
public class SimpleProdcutFactory {
    /**
     * 根据参数不同创建不同的产品 工厂模式又称静态工厂模式 记得写成static的
     * @return
     */
    public static  FatherProduct create(String name){
       if("1".equals(name)){
           return new Product1();
       }else if("2".equals(name)){
           return new Prodcut2();
       }
       return null;
    }

    public static <T extends  FatherProduct> T createByReact(Class<T> clazz){
        FatherProduct product=null;
        if(null!=clazz){
         try {
             product = (FatherProduct) Class.forName(clazz.getName()).newInstance();
         } catch (Exception e) {
             e.printStackTrace();
         }
        }
        return (T) product;
    }

}

工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。

工厂模式-将对象的创建和使用相分离

那就使用老套路接口封装工厂类 新增什么导致修改就写什么的子工厂类实现接口
将工厂模式
在这里插入图片描述
工厂模式 能力扩展的更好 仍然可以继续传递参数 比如size
到时候在工厂子类1 可以生产大的产品1 小的产品1


抽象工厂模式

工厂模式是一个工厂子类生产一个产品子类 二者一一对应
抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。
类会很多 类的个数容易过多,增加复杂度
我们可以将粒度变小 一个函数生产一个产品子类
原因二:实际情况中 很多工厂都不只生产一种东西 所以将粒度控制到函数 是很好的 可以在一个工厂子类中生产多个产品

建造者模式

创建者模式视频builder

点击阅读文章
要实现链式方法调用,其实很简单,就是让每个set方法,返回自己即可,也很容易实现
Builder角色会有很多构建对象的方法,可以通过每个方法return this,
----java使用方法链set对象

原型模式

原型模式的克隆分为浅克隆和深克隆。
浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆,这里的 Cloneable 接口就是抽象原型类
浅克隆 只复制值 但是对象数组等这种在堆中有空间的都没有克隆 而是直接指向旧的对象的
—重点看深拷贝浅拷贝例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值