工厂设计模式
Posted Mr_madong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂设计模式相关的知识,希望对你有一定的参考价值。
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。
工厂模式的类型:
- 简单工厂(Simple Factory)。
- 工厂方法(Factory Method)。
- 抽象工厂(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 Products
public 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 Products
public 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 Washer
public WasherA()
System.out.println("洗衣机-A被制造") ;
//洗衣机-B
class WasherB implements Washer
public WasherB()
System.out.println("洗衣机-B被制造") ;
//冰箱-A
class IceboxA implements Icebox
public IceboxA()
System.out.println("冰箱-A被制造") ;
//冰箱-B
class IceboxB implements Icebox
public IceboxB()
System.out.println("冰箱-B被制造") ;
再然后,创建生产产品的工厂,首先要定义工厂的行为接口:
interface Factory
Washer 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 Products
public static void main(String args[])
Factory a = new FactoryA() ;
Factory b = new FactoryB() ;
a.createWasher();
a.createIcebox();
b.createWasher();
b.createWasher();
最后的总结:通过今天对工厂设计模式的进一步学习,了解了皮毛,看视频学会了设计模式的基本定义格式,再通过别人的博客学到了这三种模式,但是还是一知半解,希望以后再工作中进一步加深学习。
以上是关于工厂设计模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )