单例模式
概念:
确保一个类只有一个实例,而且自行实例化并向震哥哥系统提供这个实例
应用:
无状态的,一般以工具类情势,进行提供
代码:
懒汉式,双重查抄锁
- class Singleton {
- private static volatile Singleton instance = null;
- private Singleton() {}
- public static Singleton getInstance() {
- if (instance == null) {
- synchronized (Singleton.class) {
- if (instance == null) {
- instance = new Singleton();
- }
- }
- }
- return instance;
- }
- }
复制代码 备注:使用volatile修饰,是由于new Singleton()可以拆解为3步:
1、分配内存
2、初始化对象
3、指向刚分配的地址
若发生重排序,假设A线程执行了1和3,还没有执行2,B线程来到判断NULL时,不为NULL,B线程就会直接返回还没有初始化的instance了。volatile可以避免重排序
简朴工厂模式
概念:
又称为静态工厂方法模式,它属于类创建型模式。在简朴工厂模式中,可以根据参数的不同,返回不同类的实例,简朴工厂模式专门界说一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
应用:
不敷机动,新增产品需要修改工厂类;
长处在于实现对象的创建和使用分离
代码:
- public class SimpleFactory {
- public static Product createProduct(String type){
- if (type.equals("A")){
- return new ProductA();
- } else {
- return new ProductB();
- }
- }
- public static void main(String[] args) {
- Product p = SimpleFactory.createProduct("A");
- p.print();
- }
- }
- abstract class Product{
- public abstract void print();
- }
- class ProductA extends Product{
- @Override
- public void print(){
- System.out.println("A");
- }
- }
- class ProductB extends Product{
- @Override
- public void print(){
- System.out.println("B");
- }
- }
复制代码 工厂模式
概念:
界说一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类
应用:
代码:
- // 定义产品接口
- interface Shape {
- void draw();
- }
- // 具体产品1
- class Circle implements Shape {
- @Override
- public void draw() {
- System.out.println("Drawing a Circle");
- }
- }
- // 具体产品2
- class Square implements Shape {
- @Override
- public void draw() {
- System.out.println("Drawing a Square");
- }
- }
- // 定义工厂接口
- interface ShapeFactory {
- Shape createShape();
- }
- // 具体工厂1
- class CircleFactory implements ShapeFactory {
- @Override
- public Shape createShape() {
- return new Circle();
- }
- }
- // 具体工厂2
- class SquareFactory implements ShapeFactory {
- @Override
- public Shape createShape() {
- return new Square();
- }
- }
- // 客户端代码
- public class FactoryMethodDemo {
- public static void main(String[] args) {
- ShapeFactory circleFactory = new CircleFactory();
- Shape circle = circleFactory.createShape();
- circle.draw();
- ShapeFactory squareFactory = new SquareFactory();
- Shape square = squareFactory.createShape();
- square.draw();
- }
- }
复制代码 抽象工厂模式
概念:
一种更高级的工厂模式,用于创建相关或依靠对象的家族,而无需明确指定具体类
代码:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |