浅谈工厂模式

今天在项目中用单例设计模式解决了问题,突然对设计模式大感兴趣。所以决定从最简单的模式学起走。所以看了工厂模式。发现一个问题。是不是每个模式都对应了java里面的基本知识点。单例模式利用了java的static域。工厂模式则利用了java的多态。

1. 简单工厂模式。

    a. 需要一个产品接口。所有产品实现该接口

    b. 需要一个工厂。创建一个返回产品接口类型的方法。这里就利用了多态。当调用此方法的时候就返回一个           接口类型,在工厂里面已经处理了你需要返回的实例类。

   

//第一要素 产品接口
public interface CarInterface {
	public void driver();
}

public class Bmw implements CarInterface {

	@Override
	public void driver() {
		System.out.println("this is bmw");
	}
}


public class Benz implements CarInterface {

	@Override
	public void driver() {
		System.out.println("this is benz");
	}
}

//第二要素 工厂 创建一个返回接口类型方法。根据传递的参数决定要返回的类

public class Factory {

	public CarInterface factory(String benz){
		if(benz.equals("benz")){
			return new Benz();
		}else if(benz.equals("bmw")){
			return new Bmw();
		}
		return null;
	}

}

 2. 工厂方法模式。

 

     工厂方法模式个人理解是将工厂模式进行了一层包装。从建立一个工厂实例类到建立一个工厂接口或者抽象类。不同的抽象工厂返回相同的产品接口。代码跟简单工厂模式一样,只是想工厂类变成实现一个工厂接口或者抽象类。

//抽象产品角色
public interface Moveable {
    void run();
}
 //具体产品角色
 public class Plane implements Moveable {
    @Override
    public void run() {
        System.out.println("plane....");
    }
}
 
public class Broom implements Moveable {
    @Override
    public void run() {
        System.out.println("broom.....");
    }
}
 

//抽象工厂
 public abstract class VehicleFactory {
    abstract Moveable create();
}
 
//具体工厂
 public class PlaneFactory extends VehicleFactory{
    public Moveable create() {
        return new Plane();
    }
}
 
public class BroomFactory extends VehicleFactory{
    public Moveable create() {
        return new Broom();
    }
}

 

     

3. 抽象工厂模式。

   相对来说我觉的这个模式最符合我平常的写法。

   

//抽象工厂类
 
public abstract class AbstractFactory {
    public abstract Vehicle createVehicle();
    public abstract Weapon createWeapon();
    public abstract Food createFood();
}
 
//具体工厂类,其中Food,Vehicle,Weapon是抽象类,
 
public class DefaultFactory extends AbstractFactory{
    @Override
    public Food createFood() {
        return new Apple();
    }
    @Override
    public Vehicle createVehicle() {
        return new Car();
    }
    @Override
    public Weapon createWeapon() {
        return new AK47();
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值