首页 > 其他 > 详细

设计模式-工厂模式

时间:2014-02-23 13:22:44      阅读:241      评论:0      收藏:0      [点我收藏+]

目录

1 简单工厂方法

2 工厂方法

3 抽象工厂方法

4 抽象工厂方法+简单工厂方法

简单工厂方法

bubuko.com,布布扣

 

简单工厂的工厂类使用静态方法,通过不同的入参实例化不同的对象并返回(这里利用反射机制进行实例化对象

能够横向的添加产品,而不改动源码

产品接口

bubuko.com,布布扣
package simple;
public interface Z {
    public void method1();
    public void method2();
}
bubuko.com,布布扣

 

A1产品

bubuko.com,布布扣
package simple;
public class A1 implements Z{
    @Override
    public void method1() {
        System.out.println("A--method1");
    }
    @Override
    public void method2() {
        System.out.println("A--method2");
    }
}
bubuko.com,布布扣

 

工厂类

bubuko.com,布布扣
public class Factory {
    public static Z getFunctionInstence(String type) throws Exception{
        Z z =null;
        z = (Z) Class.forName(type).newInstance();
        return z;
    } 
}
bubuko.com,布布扣

 测试类

bubuko.com,布布扣
@Test
    public void testFactory() {
        try {
            Factory.getFunctionInstence("simple.A1").method2();
Factory.getFunctionInstence("simple.B1").method2(); }
catch (Exception e) { e.printStackTrace(); } }
bubuko.com,布布扣

 

结果

bubuko.com,布布扣
A--method2
B--method2
bubuko.com,布布扣

 

 

 

工厂方法

bubuko.com,布布扣

 

工厂方法的工厂类实现了统一的控制接口,对于实例化不同的产品,只需要变换实现接口的工厂类即可

产品类及接口略

 

工厂接口

bubuko.com,布布扣
package standard;
public interface IFunctionFactory {
    public Z getInstence();
}
bubuko.com,布布扣

 

工厂A

bubuko.com,布布扣
package standard;
public class FactoryA implements IFunctionFactory{
    @Override
    public Z getInstence() {
        return new A1();
    }
}
bubuko.com,布布扣

 

工厂B

bubuko.com,布布扣
package standard;
public class FactoryB implements IFunctionFactory{
    @Override
    public Z getInstence() {
        return new B1();
    }
}
bubuko.com,布布扣

 

测试类

bubuko.com,布布扣
@Test
    public void testFactory() {
        IFunctionFactory factory;
         factory= new FactoryA();
         factory.getInstence().method1();
         
         factory = new FactoryB(); //通过改变工厂接口的实现
         factory.getInstence().method1();
    }
bubuko.com,布布扣

 

结果

bubuko.com,布布扣
A--method1
B--method1
bubuko.com,布布扣

 

 

抽象工厂方法

 

bubuko.com,布布扣

 

抽象工厂的管理模式与工厂模式类似,但由于工厂类中有多种方法,可以同时对不同组的产品进行管理

工厂接口

bubuko.com,布布扣
package abstractFactory;
public interface IFunctionFactory {
    public X getInstence1();
    public Y getInstence2();
}
bubuko.com,布布扣

 

工厂A

bubuko.com,布布扣
package abstractFactory;
public class FactoryA implements IFunctionFactory{
    @Override
    public X getInstence1() {
        return new A1();
    }
    @Override
    public Y getInstence2() {
        return new A2();
    }
}
bubuko.com,布布扣

 

工厂B

bubuko.com,布布扣
package abstractFactory;
public class FactoryB implements IFunctionFactory{
    @Override
    public X getInstence1() {
        return new B1();
    }
    public Y getInstence2() {
        return new B2();
    }
}
bubuko.com,布布扣

 

产品接口X,Y(略)

bubuko.com,布布扣
package abstractFactory;
public interface X {
    public void method1();
    public void method2();
}
bubuko.com,布布扣

继承产品接口X的产品A1,B1(略)

bubuko.com,布布扣
package abstractFactory;
public class A1 implements X{
    @Override
    public void method1() {
        System.out.println("A1--method1");
    }
    @Override
    public void method2() {
        System.out.println("A1--method2");
    }
}
bubuko.com,布布扣

 

继承产品接口Y的产品A2,B2(略)

bubuko.com,布布扣
package abstractFactory;
public class A2 implements Y{
    @Override
    public void method1() {
        System.out.println("A2--method1");
    }
    @Override
    public void method2() {
        System.out.println("A2--method2");
    }
}
bubuko.com,布布扣

 

测试类

bubuko.com,布布扣
package abstractFactory;


import org.junit.Before;
import org.junit.Test;

public class FunctionFactoryTest {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void testFactoryA() {
        IFunctionFactory factory ;
        factory = new FactoryA();
        factory.getInstence1().method1();
        factory.getInstence2().method1();
        factory = new FactoryB();
        factory.getInstence1().method2();
        factory.getInstence2().method2();
    }

}
bubuko.com,布布扣

 

结果

bubuko.com,布布扣
A1--method1
A2--method1
B1--method2
B2--method2
bubuko.com,布布扣

 

 简单工厂方法改造抽象方法

 抽象工厂方法用于对产品组进行管理,但是修改的时候需要修改的类较多。

 通过简单工厂放方法对工厂类进行改造一定程度上可以实现开闭原则。

工厂类

bubuko.com,布布扣
package combination;
public class Factory {
    String type="";
    Factory(String type){
        this.type=type;
    }
    public X getFactoryX() throws Exception{
        return (X) Class.forName(type+"1").newInstance();
    }
    
    public Y getFactoryY(String type) throws Exception{
        return (Y) Class.forName(type+"2").newInstance();
    }
}
bubuko.com,布布扣

 

测试类

bubuko.com,布布扣
@Test
    public void test() throws Exception {
        Factory factory = new Factory("combination.B");
        factory.getFactoryX().method2();
    }
bubuko.com,布布扣

 

结果

bubuko.com,布布扣
B1--method2
bubuko.com,布布扣

设计模式-工厂模式

原文:http://www.cnblogs.com/sunfan1988/p/3561500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!