1、工厂方法模式
顾名思义,创建一个工厂类,用于创建特定的对象。
汽车接口:
interface Car{}
两个实现类:
class BM implements Car{}
class BC implements Car{}
工厂方法:
class CarFactory{
public Car createCar(String carType){
if("BM".equals(carType))
return new BM();
if("BC".equals(carType))
return new BC();
}
}
客户端调用:
main(){
CarFactory cf = new CarFactory();
Car c = cf.createCar("enter the type of car");
}
2、抽象工厂模式
在工厂方法模式中,如果需要新增加一种车型的生产,就必须对原来的工厂类进行修改,这样违背了开闭原则,因此,考虑将工厂也抽离出来,即每一种车型的生产都有一个工厂,所有的工厂实习同一个工厂接口。
伪代码:
/** 汽车接口 */
interface Car{}
/** 宝马汽车 */
class BMCar implements Car{}
/** 奔驰汽车 */
class BCCar implements Car{}
/** 汽车工厂接口 */
interface CarFactory{
Car createCar();
}
/** 宝马工厂 */
class BMFactory implements CarFactory{
Car createCar(){return new BMCar();}
}
/** 奔驰工厂 */
class BCFactory implements CarFactory{
Car createCar(){return new BCCar();}
}
/** 客户端调用 */
main(){
CarFactory cf = new 具体的工厂();
Car c = cf.createCar();
}
3、单例模式
在整个上下文环境中,类的实例只能有一个
伪代码:
class Singleton{
/** 构造器私有,防止类外部new */
private Singleton(){}
private static Singleton s = null;
static synchronized getInstance(){
if(null == s)
s = new Singleton();
return s;
}
}
4、建造者模式
工厂模式或抽象工厂模式一次只能创建一个实例,而建造者模式一次可以创建多个实例。
伪代码:
伪代码:
class CarFactory{
static List<Car> createCar(int n){
List<Car> carList = new ArrayList<Car>();
for(int i = 0 ; i < n ; i ++){
carList.add(new Car());
}
return carList;
}
}
5、原型模式
以一个对象作为原型,对其进行复制、克隆,产生一个新对象。伪代码:
class Prototype implements Cloneable{
public Object clone() throws CloneNotSupportedException {
Prototype proto = (Prototype) super.clone();
return proto;
}
}