一、简单工厂模式
简单工厂模式又称静态工厂模式,在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定哪一个产品类应当被实例化。
简单工厂模式的组成:
工厂类角色:本模式的核心,含有一定的商业逻辑和判断逻辑,在Java中由一个具体类实现。
抽象产品角色:它一般是聚义产品继承的父类或者实现的接口,在Java中由接口或抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例,在Java中由一个具体类实现。
模式示例:
/** * *接口的定义,该接口可通过简单工厂来创建 */ public interface Api { public void operation(String s); }
/** * *接口具体实现类A */ public class ImplA implements Api { public void operation(String s) { System.out.println("ImplA s==" + s); } }
/** * *接口具体实现类B<pre name="code" class="sql">/** * *工厂类,用于创建Api对象 */ public class Factory { /** * 具体创建Api对象的方法 */ public static Api createApi(int condition) { Api api = null; if(condition == 1) api = new ImplA(); else if(condition == 2) api = new ImplB(); return api; } }
*/public class ImplB implements Api{public void operation(String s){System.out.println("ImplB s==" + s);}}/** * *客户端,使用Api接口 */ public class Client { public static void main(String[] args) { //通过简单工厂来获取接口对象 Api api = Factory.createApi(1); api.operation("简单工厂模式示例"); } }
二、工厂方法模式
工厂方法模式是简单工厂模式的进一步的抽象化和推广,工厂方法模式里不再由一个工厂类决定哪一个产品应当被实例化,这个决定被交给抽象工厂的子类去做。
工厂方法模式组成:
抽象工厂角色:工厂方法模式的核心,与应用程序无关。是具体工厂角色必须实现的接口或必须继承的父类,Java中由抽象类或接口来实现。
具体工厂角色:含有和业务逻辑相关的代码,负责创建对应的具体产品的对象。
抽象产品角色:是具体产品继承的父类或者是实现的接口,Java中由抽象类或接口实现。
具体产品角色:具体工厂角色创建的对象就是该角色的实例,Java中由具体类实现。
示例:
//抽象产品角色 public interface Moveable { void run(); } //具体产品角色 public class Plane implements Moveable { @Override public void run() { System.out.println("plane...."); } } public class Broom implements Moveable { @Override public void run() { System.out.println("broom....."); } } //抽象工厂 public abstract class VehicleFactory { abstract Moveable create(); } //具体工厂 public class PlaneFactory extends VehicleFactory{ public Moveable create() { return new Plane(); } } public class BroomFactory extends VehicleFactory{ public Moveable create() { return new Broom(); } } //测试类 public class Test { public static void main(String[] args) { VehicleFactory factory = new BroomFactory(); Moveable m = factory.create(); m.run(); } }
三、抽象工厂模式
示例:
//抽象工厂类 public abstract class AbstractFactory { public abstract Vehicle createVehicle(); public abstract Weapon createWeapon(); public abstract Food createFood(); } //具体工厂类,其中Food,Vehicle,Weapon是抽象类, public class DefaultFactory extends AbstractFactory{ @Override public Food createFood() { return new Apple(); } @Override public Vehicle createVehicle() { return new Car(); } @Override public Weapon createWeapon() { return new AK47(); } } //测试类 public class Test { public static void main(String[] args) { AbstractFactory f = new DefaultFactory(); Vehicle v = f.createVehicle(); v.run(); Weapon w = f.createWeapon(); w.shoot(); Food a = f.createFood(); a.printName(); } }
三种工厂模式的比较:
工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式,把核心放在一个实类上。
工厂方法模式允许很多实的工厂类从抽象工厂类继承下来,从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。
简单工厂模式是由工厂方法模式退化而来。
在抽象工厂方法模式中,抽象产品可能是一个或多个,从而构成一个或过个产品族。在只有一个产品族的情况下,抽象工厂模式退化为工厂方法模式。
四、适配器模式
是把一个类的接口转换成客户端所期望的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能一起工作。
分为类适配器模式的对象适配器模式。
类适配器模式:把适配的类的API转换为目标类的API。
对象适配器模式:与类适配器模式一样,对象适配器模式也是把适配的类的API转换为目标类的API。不同的是,对象的适配器模式不是使用继承关系连接到
目标类,而是使用委派关系连接到目标类。
具体参考:http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html
五、单例模式
参考:http://blog.csdn.net/jason0539/article/details/23297037
http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/
六、原型模式
设计模式参考:http://blog.csdn.net/jason0539/article/category/2093817