核心代码:(简单工厂)
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("比亚迪停车了!");
}
}