工厂模式&单例模式

核心代码:(简单工厂)

package com.factory;/*
 *@author:
 *@time
 */

import com.entity.Aodi;
import com.entity.Byd;
import com.entity.Car;

public class CarFactory {
    public Car getCar(String type){
        if("奥迪".equals(type)){
            return Aodi.getInstance();
        }
        else if("比亚迪".equals(type)){
            return Byd.getInstance();
        }
        else
            return null;
    }
}

把创建实例的工作交给工厂去完成,不再由客户直接接触实例,客户不再需要车怎么创建,只需要向工厂提出对某种车的需求(上述代码中通过getCar()方法传入对车的需求),具体的创建由工厂自己完成。如下:

public static void main(String[] args) {
        Car car=new CarFactory().getCar("比亚迪");
        car.run();
    }

方法工厂模式;



    /**
     * 工厂方法模式,实现了开闭原则,有利于功能的扩展
     */

    public static void test2(){
        Car car1=new BydFactory().getCar();
        Car car2=new BaomaFactory().getCar();
        Car car3=new AodiFactory().getCar();
        car1.run();
        car2.run();
        car3.run();
    }

    //工厂方法模式每个车的新建都在自己的工厂创建,有新车时只需添加相应的工厂,无需改动其他代码
    import com.entity.Aodi;
    import com.entity.Car;

    public class AodiFactory {

        public Car getCar(){
            return Aodi.getInstance();
        }
    }

实体(单例模式):

饿汉式:

package com.entity;/*
 *@author:
 *@time
 */

public class Baoma implements Car{

    private Baoma(){}

    /**
     * 饿汉式单例模式
     */
    private static final Baoma instance=new Baoma();;
    
    public static Baoma getInstance(){
        return instance;
    }

    @Override
    public void run() {
        System.out.println("宝马启动了!");
    }

    @Override
    public void stop() {
        System.out.println("宝马停车了!");
    }
}

双重检查实现

package com.entity;/*
 *@author:
 *@time
 */

public class Aodi implements Car{
    /**
     * 双重检查实现单例模式
    */
    private static volatile Aodi instance;
    private Aodi(){}
    public static Aodi getInstance(){
        if(instance==null){
            synchronized (Aodi.class){
                if(instance==null){
                    instance=new Aodi();
                    return instance;
                }
            }
        }
        return instance;
    }
    @Override
    public void run() {
        System.out.println("奥迪启动了!");
    }

    @Override
    public void stop() {
        System.out.println("奥迪停车了!");

    }
}

静态内部类实现:

package com.entity;/*
 *@author:
 *@time
 */

public class Byd implements Car {

    /**
     * 静态内部类实现单例模式
     */
    private static class bydClass{
        private static Byd byd=new Byd();
    }


    public static Byd getInstance(){

        return bydClass.byd;
    }
    private Byd(){}
    @Override
    public void run() {
        System.out.println("比亚迪启动了!");
    }

    @Override
    public void stop() {
        System.out.println("比亚迪停车了!");

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值