Java 设计模式-工厂模式

来源:互联网 发布:snmp编程 编辑:程序博客网 时间:2024/06/07 17:08

开始看Java的设计模式。

对于Java来说,更重要得是设计的思想,和实现的架构,其次,才是技术细节。毕竟,Java语言的类库做的相当不错了,还有很多免费的工具包,另外,不用考虑内存的问题(递归造成的堆问题不在此列)因此在效率上问题不用特别操心,工作的重心应当放在实现上。所以,设计模式对于Java,就显得尤为重要。

工厂模式是一种面向接口编程的典型例子,他的代码量是增多了,而且看上去更为复杂,但是对于客户端来说,操作的过程更加轻松了,而且可以很轻松的扩展,复用。这就是面向对象思想的核心之一。

好了,先不废话,谈谈Factory模式。

FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到Factory Method 模式了.简单说来,Factory Method可以根据不同的条件产生不同的实例,当然这些不同的实例通常是属于相同的类型,具有共同的父类.Factory Method把创建这些实例的具体过程封装起来了,简化了客户端的应用,也改善了程序的扩展性,使得将来可以做最小的改动就可以加入新的待创建的类. 通常我们将Factory Method作为一种标准的创建对象的方法,当发现需要更多的灵活性的时候,就开始考虑向其它创建型模式转化

我写了几个类,其实一看,就明白Factory模式是怎样工作的了

首先,定义一个父类

abstract class Factory {public String name;public Factory(String sName){name = sName;}public abstract void open();public abstract void close();}
其次,写他的子类。
public class ChemicalFactory extends Factory {public ChemicalFactory(String sName) {super(sName);}public void close() {System.out.println("The Chemical Factory is Closing...");}@Overridepublic void open() {System.out.println("The Chemical Factory is Opening...");}}
public class IronFactory extends Factory{public IronFactory(String sName) {super(sName);}public void close() {System.out.println("The Iron Factory is Closing...");}@Overridepublic void open() {System.out.println("The Iron Factory is Opening...");}}
这是产品类,再写创建产品的父类
public abstract class CreateFactory {protected abstract Factory implentionFactory(String sName);public void anOperation(String sName){Factory factory = implentionFactory(sName) ;System.out.println("Current Factory is :"+factory.name);factory.open();factory.close();}}

具体创建的产品,需要继承这个类

public class CreateChemicalFactory extends CreateFactory {@Overrideprotected Factory implentionFactory(String sName) {return new ChemicalFactory(sName+"create by chemical factory");}}
 
public class CreateIronFactory extends CreateFactory{@Overrideprotected Factory implentionFactory(String sName) {return new IronFactory(sName + "Create by iron factory");}}

最后,一个main运行这些

 

public class MainClass {public static void main(String[] args) {CreateFactory factoryA = new CreateChemicalFactory();CreateFactory factoryB = new CreateIronFactory();factoryA.anOperation("One ");factoryB.anOperation("Two ");}}
 

 

现在,当你需要新添加种类的时候,只需要去增加具体的产品类和产生他们的类了,其他的地方,抽象类都已经规定好了,不用做 任何修改。工厂类的好处就是将类和创建类的动作分开,并且将种类分开,各司其职,不用牵一发而动全身,这就是大规模开发中最大的好处。

 
原创粉丝点击