工厂设计模式

枕上诗书闲处好,门前风景雨来佳。这篇文章主要讲述工厂设计模式相关的知识,希望能为你提供帮助。
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。
工厂模式的类型:

  1. 简单工厂(Simple Factory)。
  2. 工厂方法(Factory Method)。
  3. 抽象工厂(Abstract Factory)。
一、简单工厂(Simple Factory)
又称静态工厂,是工厂三种形态中最为简单的。其组成由一个静态方法,用来接收参数,并根据参数来决定返回实现统一接口的不用类的实例。
范例:
假设一家工厂,几生产洗衣机,有生产冰箱,还有空调等等..
1、首先为所有产口定义一个共同的产品接口;
interface Product

接着我们让这个工厂的所有产品都必须实现此接口。
class Washer implements Product public Washer() System.out.println("洗衣机被制造了") ; class Icebox implements Product public Icebox() System.out.println("冰箱被制造了") ; class AirCondition implements Product public AirCondition() System.out.println("空调被制造了") ;

接下来我们来写一个工厂类,由它来负责生产以上的产品。
class SimpleFactory public static Product factory(String productName) throws Exception if(productName.equals("Washer")) return new Washer() ; else if(productName.equals("Icebox")) return new Icebox() ; else if(productName.equals("AirCondition")) return new AirCondition() ; else throw new Exception("没有该产品") ;

SimpleFactory将根据不同的订单类决定生产什么产品(主类)
public class Productspublic static void main(String args[]) try SimpleFactory.factory("Washer"); SimpleFactory.factory("Icebox"); SimpleFactory.factory("AirCondition"); catch(Exception e) e.printStackTrace() ;

程序执行结果:
工厂设计模式

文章图片

总结:仔细观察上面程序,简单共产的核心就是其中的SimpleFactory类,这个类要拥有判断能力。
简单工厂有局限性,一旦核心SimpleFactory类出现故障,那么整个程序就瘫痪了。
二、工厂方法(Factory Method)
由于简单类的局限性(核心SimpleFactory类容易出现问题),为了降低风险和有利于日后的维护、拓展。引入工厂方法.
工厂方法接口定义:
interface Factory public Product create();

定义接口:
interface Product

实现接口的产品类:
class Washer implements Product public Washer() System.out.println("洗衣机被制造了"); class Icebox implements Product public Icebox() System.out.println("冰箱被制造了"); class AirCondition implements Product public Icebox() System.out.println("空调被制造了");

工厂方法的核心,也就是创建产品对象的具体工厂类:
//创建洗衣机的工厂 class CreateWasher implements Factory public Product create() return new Washer(); //创建冰箱的工厂 class CreateIcebox implements Factory public Product create() return new Icebox(); //创建空调的工厂 class CreateAirCondition implements Factory public Product create() return new AirCondition();

主类定义:
public class Productspublic static void main(String args[]) try Factory W = new CreateWasher() ; Factory I = new CreateIcebox() ; Factory C = new CreateAirCondition() ; W.create() ; I.create() ; C.create() ; catch(Exception e) e.printStackTrace() ;

总结:
工厂方法和简单工厂的主要区别是,简单工厂是把创建产品的职能都放在一个类里面,而工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码。
抽象方法:
抽象工厂:意的意图在于创建一系列互相关联或互相依赖的对象。
1、冰箱-A
2、冰箱-B
1、洗衣机-A
2、洗衣机-B
创建冰箱和洗衣机的接口:
//洗衣机接口 interface Washer //冰箱接口 interface Icebox

然后分别创建这两个接口所对应的产品:
//洗衣机-A class WasherA implements Washerpublic WasherA() System.out.println("洗衣机-A被制造") ; //洗衣机-B class WasherB implements Washerpublic WasherB() System.out.println("洗衣机-B被制造") ; //冰箱-A class IceboxA implements Iceboxpublic IceboxA() System.out.println("冰箱-A被制造") ; //冰箱-B class IceboxB implements Iceboxpublic IceboxB() System.out.println("冰箱-B被制造") ;

再然后,创建生产产品的工厂,首先要定义工厂的行为接口:
interface FactoryWasher createWasher() ; Icebox createIcebox() ;

创建工厂类,让不同的工厂负责生产不同的产品(分类):
//创建型号为A的产品工厂 class FactoryA implements Factory//创建洗衣机-A public Washer createWasher() return new WasherA() ; //创建冰箱-A public Icebox createIcebox() return new IceboxA() ; //创建型号为B的产品工厂 class FactoryB implements Factory//创建洗衣机-B public Washer createWasher() return new WasherB() ; //创建冰箱-B public Icebox createIcebox() return new IceboxB() ;

主类实现:
public class Productspublic static void main(String args[])Factory a = new FactoryA() ; Factory b = new FactoryB() ; a.createWasher(); a.createIcebox(); b.createWasher(); b.createWasher();

【工厂设计模式】最后的总结:通过今天对工厂设计模式的进一步学习,了解了皮毛,看视频学会了设计模式的基本定义格式,再通过别人的博客学到了这三种模式,但是还是一知半解,希望以后再工作中进一步加深学习。

    推荐阅读