没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1.单例模式(Singleton Pattern)
定义:Ensure a class has only one instance, and provide a global point of access
to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实
例。)
通用代码:(是线程安全的)
public class Singleton {
private static nal Singleton singleton = new
Singleton(); //限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton()
{ return singleton;
}
//类中其他方法,尽量是 static
public static void doSomething(){
}
}
使用场景:
● 要求生成唯一序列号的环境;
● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数器,
可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安
全的;
● 创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源;
● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当
然,也可以直接声明为 static 的方式)。
线程不安全实例:
public class Singleton {
private static Singleton singleton =
null; //限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton()
{ if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
解决办法:
在 getSingleton 方法前加 synchronized 关键字,也可以在 getSingleton 方法内增加
synchronized 来实现。最优的办法是如通用代码那样写。
2.工厂模式
定义:Define an interface for creating an object,but let subclasses decide which
class to instantiate.Factory Method lets a class defer instantiation to subclasses.
(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类
的实例化延迟到其子类。)
Product 为抽象产品类负责定义产品的共性,实现对事物最抽象的定义;
Creator 为抽象创建类,也就是抽象工厂,具体如何创建产品类是由具体的实现工
厂 ConcreteCreator 完成的。
具体工厂类代码:
public class ConcreteCreator extends Creator {
public <T extends Product> T
createProduct(Class<T> c){ Product
product=null;
try {
product =
(Product)Class.forName(c.getName()).newInstance();
} catch (Exception e) {
//异常处理
}
return (T)product;
}
}
简单工厂模式:
一个模块仅需要一个工厂类,没有必要把它产生出来,使用静态的方法
多个工厂类:
每个人种(具体的产品类)都对应了一个创建者,每个创建者独立负责创建对应的
产品对象,非常符合单一职责原则
代替单例模式:
单例模式的核心要求就是在内存中只有一个对象,通过工厂方法模式也可以只在内
存中生产一个对象
延迟初始化:
ProductFactory 负责产品类对象的创建工作,并且通过 prMap 变量产生一个
缓存,对需要再次被重用的对象保留
使用场景:jdbc 连接数据库,硬件访问,降低对象的产生和销毁
3.抽象工厂模式(Abstract Factory
Pattern)
定义:Provide an interface for creating families of related or dependent objects
without specifying their concrete classes.(为创建一组相关或相互依赖的对象提
供一个接口,而且无须指定它们的具体类。)
抽象工厂模式通用类图:
抽象工厂模式通用源码类图:
抽象工厂类代码:
public abstract class AbstractCreator {
//创建 A 产品家族
public abstract AbstractProductA
createProductA(); //创建 B 产品家族
public abstract AbstractProductB createProductB();
}
使用场景:
一个对象族(或是一组没有任何关系的对象)都有相同的约束。
涉及不同操作系统的时候,都可以考虑使用抽象工厂模式
4.模板方法模式(Template Method
Pattern)
定义:Define the skeleton of an algorithm in an operation,deferring some steps to
subclasses.Template Method lets subclasses redefine certain steps of an algorithm
without changing the algorithm's structure.(定义一个操作中的算法的框
架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义
该算法的某些特定步骤。)
AbstractClass 叫做抽象模板,它的方法分为两类:
● 基本方法
基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。
● 模板方法
可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调
度,完成固定的逻辑。
注意: 为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆
写。
具体模板:ConcreteClass1 和 ConcreteClass2 属于具体模板,实现父类所定义
的一个或多个抽象方法,也就是父类定义的基本方法在子类中得以实现
使用场景:
● 多个子类有公有的方法,并且逻辑基本相同时。
● 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各
个子类实现。
● 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后
通过钩子函数(见“模板方法模式的扩展”)约束其行为。
5.建造者模式(Builder Pattern)
定义:Separate the construction of a complex object from its representation so
that the same construction process can create different representations.(将一个
复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)
● Product 产品类
通常是实现了模板方法模式,也就是有模板方法和基本方法,例子中的
BenzModel 和 BMWModel 就属于产品类。
● Builder 抽象建造者
规范产品的组建,一般是由子类实现。例子中的 CarBuilder 就属于抽象建造者。
● ConcreteBuilder 具体建造者
实现抽象类定义的所有方法,并且返回一个组建好的对象。例子中的
BenzBuilder 和 BMWBuilder 就属于具体建造者。
剩余24页未读,继续阅读
资源评论
阿灿码农
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功