工厂模式简单应用

工厂模式是一种设计理念,故名思意,通过工厂生产出一种产品出来,分为简单工厂模式、工厂模式、抽象工厂模式

一.简单工厂模式

工厂类拥有一个工厂方法(create),接受了一个参数,通过不同的参数实例化不同的产品类。

优点:通过工厂类可以创建任何产品类,无所不能

缺点:负担重,工厂代码量会越来越大,不符合开闭原则,增加产品,必须修改工厂类

/**
 * 动物工厂
 * @author zhouzhongyi
 *
 */
public class SimpleAnimalFatory {
	public static Animal createAnimal(String name){
		if("cat".equals(name)){//创建猫
			return new Cat();
		}else if("dog".equals(name)){//创建狗
			return new Dog();
		}else{//。。等等其他
			return null;
		}
	}
}

二.工厂模式

工厂方法是针对每一种产品提供一个工厂类,通过不同的工厂实例来创建不同的产品实例

优点:

  • 减轻了工厂类负担,把某一类/某一种东西交由一个工厂生产;
  • 增加某一类”东西“不需要修改工厂类,添加生产这类”东西“的工厂即可,符合开放-封闭原则

缺点:对于某些可以形成产品族的情况处理比较复杂

/**
 *抽象 动物工厂
 * @author zhouzhongyi
 *
 */
public abstract class AnimalFatory {
	 工厂方法
	public abstract Animal createAnimal(); 
}
/**
 * 猫工厂
 * @author zhouzhongyi
 *
 */
public class CatFatory extends AnimalFatory {

	@Override
	public Animal createAnimal() {
		// TODO Auto-generated method stub
		return new Cat();
	}

}
/**
 * 狗工厂
 * @author zhouzhongyi
 *
 */
public class DogFatory extends AnimalFatory {

	@Override
	public Animal createAnimal() {
		// TODO Auto-generated method stub
		return new Dog();
	}

}

 

 

三.抽象工厂模式

抽象工厂是针对某一族产品的概念,前面工厂模式中通过工厂可以创建狗、猫,那能否创建某一类型的狗和猫呢?比如说创建不同颜色的狗和猫,代码如下:

/**
 * 动物一族
 * @author zhouzhongyi
 *
 */
public interface Animal {
	public void createAnimal(); 
}
/**
 * 把猫抽象出来
 * @author zhouzhongyi
 *
 */
public abstract class Cat implements Animal {
	public abstract void createAnimal();
}

/**
 * 把狗抽象出来
 * @author zhouzhongyi
 *
 */
public abstract class Dog implements Animal {
	public abstract void createAnimal();
}
/**
 * 具体颜色的猫
 * @author zhouzhongyi
 *
 */
public class HeiCat extends Cat {

	@Override
	public void createAnimal() {
		System.out.println("我是黑颜色的猫");
	}

}

 

/**
 * 具体颜色的猫
 * @author zhouzhongyi
 *
 */
public class HongCat extends Cat {
	@Override
	public void createAnimal() {
		System.out.println("我是红颜色的猫");
	}
}
/**
 * 具体颜色的狗
 * @author zhouzhongyi
 *
 */
public class HeiDog extends Dog{

	@Override
	public void createAnimal() {
		System.out.println("我是黑狗");
	}

}

 

/**
 * 具体颜色的狗
 * @author zhouzhongyi
 *
 */
public class HongDog extends Dog{

	@Override
	public void createAnimal() {
		System.out.println("我是红狗");
	}

}
/**
 * 创建动物工厂接口,通过不通颜色工厂去实现具体颜色的猫和狗
 * @author zhouzhongyi
 *
 */
public interface AnimalFatory {
	Animal getCatZu();//获取某种颜色猫对象
	Animal getDogZu();//获取某种颜色狗对象
}

 

/**
 * 黑颜色动物工厂类创建黑颜色动物对象
 * @author zhouzhongyi
 *
 */
public class HeiFatory implements AnimalFatory{

	@Override
	public Animal getCatZu() {
		// TODO Auto-generated method stub
		return (Animal) new HeiCat();
	}

	@Override
	public Animal getDogZu() {
		// TODO Auto-generated method stub
		return new HeiDog();
	}

	
	
}
/**
 * 红颜色工厂类创建红颜色动物对象
 * @author zhouzhongyi
 *
 */
public class HongFatory implements AnimalFatory{

	@Override
	public Animal getCatZu() {
		// TODO Auto-generated method stub
		return new HongCat();
	}

	@Override
	public Animal getDogZu() {
		// TODO Auto-generated method stub
		return new HongDog();
	}

	
	
}
public class Test {
	public static void main(String[] args) {
		
		AnimalFatory hongFatory = new HongFatory();
		//获取红猫
		Animal hongcat = hongFatory.getCatZu();
		hongcat.createAnimal();
		//获取红狗
		Animal hongdog = hongFatory.getDogZu();
		hongdog.createAnimal();
		//如果需在加一种颜色只需要再创建一个颜色工厂实现动物工厂接口即可
		
	}
}

上边的工厂方法模式是一种极端情况的抽象工厂模式(即只生产一种产品的抽象工厂模式),而抽象工厂模式可以看成是工厂方法模式的一种推广

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

意向天开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值