简单工厂和工厂方法
?
?
?
?一、简单工厂模式
???? 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
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不同的其他计算机配件,例如显卡)。
?
?
?
?
三,抽象工厂
?
?