设计模式-----简单工厂&工厂方法&抽象工厂

简单工厂

简单工厂模式的工厂类用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

public class Car{
    public void function1();
    public void function2();
}


public class Broom{
    public void function1();
    public void function2();
}




/**
 * 简单工厂的可扩展性不好
 */
public class SimpleVehicleFactory {
    public Car createCar() {
        //before processing
        return new Car();
    }

    public Broom createBroom() {
        return new Broom();
    }
}

工厂方法

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品) 

每个产品一个工厂 

//产品接口
public interface Moveable {
    void go();
}


//具体产品1
public class Car implements  Moveable {

    public void go() {
        System.out.println("Car go wuwuwuwuw....");
    }
}

//具体产品2
public class Broom implements Moveable{

    @Override
    public void go() {
        System.out.println("broom flying chuachuachua .....");
    }
}

//产品1工厂方法
public class CarFactory {
    public Moveable create() {
        System.out.println("a car created!");
        return new Car();
    }
}

//产品2工厂方法
public class BroomFactory {
    public Moveable create() {
        System.out.println("a broom created!");
        return new Broom();
    }
}




抽象工厂

 抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

对产品族扩展友好

//抽象工厂
public abstract class AbastractFactory {
    abstract Food createFood();
    abstract Vehicle createVehicle();
    abstract Weapon createWeapon();
}

//产品族1的具体工厂
public class ModernFactory extends AbastractFactory {
    @Override
    Food createFood() {
        return new Bread();
    }

    @Override
    Vehicle createVehicle() {
        return new Car();
    }

    @Override
    Weapon createWeapon() {
        return new AK47();
    }
}

//产品族2的具体工厂
public class MagicFactory extends AbastractFactory {
    @Override
    Food createFood() {
        return new MushRoom();
    }

    @Override
    Vehicle createVehicle() {
        return new Broom();
    }

    @Override
    Weapon createWeapon() {
        return new MagicStick();
    }
}

//产品抽象类1
public abstract class Food {
   abstract void printName();
}

//具体产品1
public class Bread extends Food{
    public void printName() {
        System.out.println("wdm");
    }
}

//具体产品2
public class MushRoom extends Food{
    public void printName() {
        System.out.println("dmg");
    }
}


//产品抽象类2
public abstract class Vehicle { //interface
    abstract void go();
}

//具体产品1
public class Broom extends Vehicle{
    public void go() {
        System.out.println("Car go wuwuwuwuw....");
    }
}

//具体产品2
public class Car extends Vehicle{

    public void go() {
        System.out.println("Car go wuwuwuwuw....");
    }
}




//产品抽象类3
public abstract class Weapon {
    abstract void shoot();
}

//具体产品1
public class MagicStick extends Weapon{
    public void shoot() {
        System.out.println("diandian....");
    }
}

//具体产品2
public class AK47 extends Weapon{
    public void shoot() {
        System.out.println("tututututu....");
    }
}









 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值