JAVA设计模式(二)-创建型

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;  
    }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值