设计模式-工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)

来源:互联网 发布:电脑无损播放软件 编辑:程序博客网 时间:2024/05/16 18:41

工厂模式可以分为三类: 

1)简单工厂模式(Simple Factory) 
2)工厂方法模式(Factory Method) 

3)抽象工厂模式(Abstract Factory)

区别 :
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。(翻译:一个宝马,可以有很多品牌)
一个抽象工厂类,可以派生出多个具体工厂类。 (翻译:一个宝马工厂,有专门造3系的,造5系的不同工厂)
每个具体工厂类只能创建一个具体产品类的实例。(翻译:3系的宝马工厂,只能造3系的车)
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。   
每个具体工厂类可以创建多个具体产品类的实例。   
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。   
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

两者皆可。

简单工厂示例:

产品类:

abstract class BMW {      public BMW(){                }  }    public class BMW320 extends BMW {      public BMW320() {          System.out.println("制造-->BMW320");      }  }  public class BMW523 extends BMW{      public BMW523(){          System.out.println("制造-->BMW523");      }  }  
工厂类:

public class Factory {      public BMW createBMW(int type) {          switch (type) {                    case 320:              return new BMW320();            case 523:              return new BMW523();            default:              break;          }          return null;      }  }  

客户类:

public class Customer {      public static void main(String[] args) {          Factory factory = new Factory();          BMW bmw320 = factory.createBMW(320);          BMW bmw523 = factory.createBMW(523);      }  } 

打印结果:

制造宝马320系列宝马车

制造宝马523系列宝马车



工厂方法模式示例:

产品类:

abstract class BMW {      public BMW(){                }  }  public class BMW320 extends BMW {      public BMW320() {          System.out.println("制造-->BMW320");      }  }  public class BMW523 extends BMW{      public BMW523(){          System.out.println("制造-->BMW523");      }  }  

工厂类:

interface FactoryBMW {      BMW createBMW();  }    public class FactoryBMW320 implements FactoryBMW{        @Override      public BMW320 createBMW() {            return new BMW320();      }    }  public class FactoryBMW523 implements FactoryBMW {      @Override      public BMW523 createBMW() {            return new BMW523();      }  } 

客户类:

public class Customer {      public static void main(String[] args) {          FactoryBMW320 factoryBMW320 = new FactoryBMW320();          BMW320 bmw320 = factoryBMW320.createBMW();            FactoryBMW523 factoryBMW523 = new FactoryBMW523();          BMW523 bmw523 = factoryBMW523.createBMW();      }  } 

抽象模式示例:

产品类:

//发动机以及型号    public interface Engine {      }    public class EngineA extends Engine{        public EngineA(){            System.out.println("制造-->EngineA");        }    }    public class EngineBextends Engine{        public EngineB(){            System.out.println("制造-->EngineB");        }    }      //空调以及型号    public interface Aircondition {      }    public class AirconditionA extends Aircondition{        public AirconditionA(){            System.out.println("制造-->AirconditionA");        }    }    public class AirconditionB extends Aircondition{        public AirconditionB(){            System.out.println("制造-->AirconditionB");        }    }  
工厂类:

//创建工厂的接口    public interface AbstractFactory {        //制造发动机      public Engine createEngine();      //制造空调       public Aircondition createAircondition();   }        //为宝马320系列生产配件    public class FactoryBMW320 implements AbstractFactory{                @Override        public Engine createEngine() {              return new EngineA();        }        @Override        public Aircondition createAircondition() {            return new AirconditionA();        }    }    //宝马523系列  public class FactoryBMW523 implements AbstractFactory {             @Override        public Engine createEngine() {              return new EngineB();        }        @Override        public Aircondition createAircondition() {            return new AirconditionB();        }        } 
客户:

public class Customer {        public static void main(String[] args){            //生产宝马320系列配件          FactoryBMW320 factoryBMW320 = new FactoryBMW320();            factoryBMW320.createEngine();          factoryBMW320.createAircondition();                      //生产宝马523系列配件            FactoryBMW523 factoryBMW523 = new FactoryBMW523();            factoryBMW320.createEngine();          factoryBMW320.createAircondition();      }    } 


1.简单工厂模式简要;

一个工厂方法(传一个参数320/523的值){
switch
判断,去具体某一种车型

}


工厂方法模式简要:

建一个工厂接口:分别继承它

创建3系宝马车工厂.

创建5系宝马车工厂

面对客户的需求:

什么系工厂造什么系车


抽象工厂模式简要:

发动机接口类

继承它建A型发动机类

继承它建B型发动机类


空调接口类

继承它建A型空调类—>+建造的方法

继承它建B型空调类—>+建造的方法


接口工厂{
1.
造发动机

2.造空调

}


继承接口工厂 3系工厂{
造发动机()

造空调()

}


继承接口工厂 5系工厂{
造发动机()

造空调()

}


客户:

 3系宝马车工厂对象.造发动机

 3系宝马车工厂对象.造空调

 5系宝马车工厂对象.造发动机

 5系宝马车工厂对象.造空调


    

总结:

我们使用工厂模式最终的目的是为了:解耦,降低耦合度.

作者:jason0539

博客:http://blog.csdn.net/jason0539







阅读全文
0 0
原创粉丝点击