设计模式之工厂模式

来源:互联网 发布:江苏远洋数据 编辑:程序博客网 时间:2024/06/05 14:41

首先需要区分简单工厂模式、工厂模式、抽象工厂模式

       简单工厂模式、工厂模式、抽象工厂模式都属于创建型模式,主要功能是帮助我们将对象的实例化部分抽取出来,优化系统架构,增强系统可扩展性。

       (1)简单工厂模式可以实现产品类实例代码与客户端代码分离,但是不符合开闭原则(对修改关闭,对扩展开放)。

public interface Product {}public class ProductA implements Product {public ProductA() {System.out.println("ProdutA");}}public class ProductB implements Product {public ProductB() {System.out.println("ProductB");}}public class SimpleFactory {public Product create(String name){switch (name) {case "ProductA":return new ProductA();case "ProductB":return new ProductB();default:return null;}}} public class SimpleFactoryTest {public static void main(String[] args) {new SimpleFactory().create("ProductA");new SimpleFactory().create("ProductB");}}

(2)工厂模式中,对应的工厂类可以生产对应的产品类,满足了开闭原则,无论增加多少产品类,只需要增加相应的工厂类就可以了,而不用修改原来的工厂类。

缺点是,如果产品很多,那么就要生成很多的工厂类。


public interface Product {}public class ProductA implements Product {public ProductA() {System.out.println("ProdutA");}}public class ProductB implements Product {public ProductB() {System.out.println("ProductB");}}public interface Factory {public Product createFactoryProduct() throws Exception;}public class FactoryB implements Factory {@Overridepublic Product createFactoryProduct() throws Exception {// TODO Auto-generated method stubreturn new ProductB();}}public class FactoryA implements Factory {@Overridepublic Product createFactoryProduct() throws Exception {// TODO Auto-generated method stubreturn new ProductA();}}public class MainTest {public static void main(String[] args) throws Exception {Factory factory;factory = new FactoryA();factory.createFactoryProduct();factory = new FactoryB();factory.createFactoryProduct();}}

(3)抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。

应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。

public interface ProductA {public void operationA();}public class ProductA1 implements ProductA {public ProductA1() {}@Overridepublic void operationA() {System.out.println("ProductA1");}}public class ProductA2 implements ProductA {public ProductA2() {}@Overridepublic void operationA() {System.out.println("ProductA2");}}public interface ProductB {public void operationB();}public class ProductB1 implements ProductB {public ProductB1() {}@Overridepublic void operationB() {System.out.println("ProductB1");}}public class ProductB2 implements ProductB {public ProductB2() {}@Overridepublic void operationB() {System.out.println("ProductB2");}}public interface AbstractFactory {public ProductA getProductA(String name);public ProductB getProductB(String name);}public class AbstractFactoryA implements AbstractFactory {@Overridepublic ProductA getProductA(String name) {switch (name) {case "ProductA1":return new ProductA1();case "ProductA2":return new ProductA2();default:return null;}}@Overridepublic ProductB getProductB(String name) {// TODO Auto-generated method stubreturn null;}}public class AbstractFactoryB implements AbstractFactory {@Overridepublic ProductA getProductA(String name) {return null;}@Overridepublic ProductB getProductB(String name) {switch (name) {case "ProductB1":return new ProductB1();case "ProductB2":return new ProductB2();default:return null;}}}public class FacoryProducer {public AbstractFactory getAbstractFactory(String name){if("AbstractFactoryA".equals(name)){return new AbstractFactoryA();}else if("AbstractFactoryB".equals(name)){return new AbstractFactoryB();}else {return null;}}}


原创粉丝点击