`
jtlyuan
  • 浏览: 65133 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简单工厂和工厂方法

阅读更多



 

 

 

 一、简单工厂模式
     简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。




public interface Sample{
}

Public class SampleA implements Sample{
}
Public class SampleB implements Sample{
}

public class Factory{   
public static Sample creator(int which){   //getClass 产生Sample 一般可使用动态类装载装入类。   
if (which==1)   
return new SampleA();   
else if (which==2)   
return new SampleB();  
 }  
 }

   应用情景:

   1、工厂负责筹建的对象比较少。

   2、客户只知道传入工厂的参数,对于如何创建对象(逻辑)不关心。

 

 

二 、工厂方法(Factory Method)模式
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。


 

 

 

//定义水果接口
public interface Fruit {
public String createFruit();
}
//水果1
public class Apple implements Fruit {

@Override
public String createFruit() {
return "Apple";
}
}
//水果2
public class Banand implements Fruit {

@Override
public String createFruit() {
return "Banand";
}
}



//定义水果工厂接口
public interface FruitFactory {
public Fruit factory();
}
//苹果工厂类
public class AppleFactory implements FruitFactory {

@Override
public Fruit factory() {
Fruit f= new Apple();
return f;
}

}
//香蕉工厂类
public class BanandFactory implements FruitFactory {

@Override
public Fruit factory() {
Fruit f= new Banand();
return f;
}

}

//定义一个测试类
public class FactoryTest {
private FruitFactory f1=new AppleFactory();
private FruitFactory f2=new BanandFactory();

public void test(){
System.out.println("AppleFactory生产"+f1.factory().createFruit());
System.out.println("BanandFactory生产"+f2.factory().createFruit());
}
public static void main(String[] args) {
new FactoryTest().test();
}

}
//打印结果如下:
AppleFactory生产Apple
BanandFactory生产Banand

抽象工厂模式
public interface Cpu
  {
  }
  public interface Ram
  {
  }
  //四个具体产品
  public class PcCpu implements Cpu
  {
  }
  public class MacCpu implements Cpu
  {
  }
  public class PcRam implements Ram
  {
  }
  public class MacRam implements Ram
  {
  }
  //抽象工厂角色
  public interface ComputerProducer
  {
  Cpu createCpu();
  Ram createRam();
  }
  //两个具体工厂角色
  public class PcProducer implements ComputerProducer
  {
  public Cpu createCpu()
  {
  return new PcCpu();
  }
  public Ram createRam()
  {
  return new PcRam();
  }
  }
  public class MacProducer implements ComputerProducer
  {
  [1] public Cpu createCpu()
  {
  return new MacCpu();
  }
  public Ram createRam()
  {
  return new MacRam();
  }
  }
  一般情况下,有多少个抽象产品,就有多少个工厂方法。(比如再增加一个PC与MAC不同的其他计算机配件,例如显卡)。

 

 

 

 

三,抽象工厂

 

 

  • 大小: 17.1 KB
  • 大小: 25.6 KB
  • 大小: 5.8 KB
  • 大小: 100.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics