工厂模式理解起来并不是很难 只要耐心看看代码 理解它的运作机理就好了。。。运用时就要看个人的灵活性了。
工厂是用来生产东西,但是从程序的角度讲就是 用一个工厂类来生产出你所需要的对象,这个生产出的对象可以是任意形式的 包括人,动物,水果,植物等不一定是要
机械性的东西 这是它跟现实工厂的区别之一。
产品是由工厂生产出来的 , 在程序里我们是new出来的,而在工厂模式里我们把这个new封装在了工厂类里面,用一个统一的工厂类来统一new 出这些产品
这样就达成一个共识,虽然代码写起来会很多,但是可以扩展你整个工厂的扩展性和规范性,因为你所有的产品都是由工厂统一new出来的 而不是任意一个开放
人员知道了这个产品的类,然后要做一个产品的时候 就是 产品A a = new 产品A();这样的形式来构建。 在工厂模式里就变成了 产品 a = Factory.Creat产品A();
直接看代码了类比较多 耐心开:
这里给出了 两个产品 一个是Light电灯 一个是Battery电池 还有两个工厂 分别来制造特定的产品 Light 有分为BuleLight和 RedLight ,Battery有分为GoodBattery
public interface Light
{
/*
* 对所有种类的电灯一个规范类
*/
public void doSomething();
}
public class RedLight implements Light
{
/*
* 红色电灯 基础电灯基本类是想抽象方法
*/
public RedLight(){
System.out.println("Create! RedLight");
}
public void doSomething(){
}
}
public class BuleLight implements Light
{
/*
* 蓝色电灯 基础电灯基本类是想抽象方法
*/
public BuleLight(){
System.out.println("Create BuleLight!");
}
public void doSomething(){
System.out.println("BuleLight! DoSomeThing!");
}
}
public interface Battery
{
/*
* 电池类基本类的规范
*/
public void doSomething();
}
public class GoodBattery implements Battery
{
/*
* 好的电池
*/
public GoodBattery(){
System.out.println("Create GoodBattery");
}
@Override
public void doSomething()
{
System.out.println("GoodBatteryt doSomething!");
}
}
public interface AbstractFactory
{
public Light CreateLight();
public Battery CreateBattery();
}
public class A_Factory implements AbstractFactory
{
/*
* A工厂制作蓝色电灯和好的电池
*/
@Override
public Light CreateLight()
{
return new BuleLight();
}
@Override
public Battery CreateBattery()
{
return new GoodBattery();
}
}
public class B_Factory implements AbstractFactory
{
/*
* B工厂制作红色电灯和好的电池
*/
@Override
public Light CreateLight()
{
return new RedLight();
}
@Override
public Battery CreateBattery()
{
return new GoodBattery();
}
}
public class Test
{
public static void main(String args[])
{
/*
* 测试类
*/
A_Factory t = new A_Factory();
Light bule = t.CreateLight();
bule.doSomething();
Battery ba = t.CreateBattery();
ba.doSomething();
}
}
输出结果:
Create BuleLight!
BuleLight! DoSomeThing!
Create GoodBattery
GoodBatteryt doSomething!