枕上诗书闲处好,门前风景雨来佳。这篇文章主要讲述工厂设计模式相关的知识,希望能为你提供帮助。
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。
工厂模式的类型:
- 简单工厂(Simple Factory)。
- 工厂方法(Factory Method)。
- 抽象工厂(Abstract 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();
【工厂设计模式】最后的总结:通过今天对工厂设计模式的进一步学习,了解了皮毛,看视频学会了设计模式的基本定义格式,再通过别人的博客学到了这三种模式,但是还是一知半解,希望以后再工作中进一步加深学习。
推荐阅读
- 不愧是清华大佬!把Zookeeper讲的如此简单明了
- html常用的符号实体
- 对象比较
- Java final关键字
- Java包装类
- static关键字
- 思考题2(人车关系)
- 如何迅速清除U盘AdobeR.exe病毒?
- 新U盘存在很多不明文件怎样处理?