自学内容网 自学内容网

设计模式-工厂设计模式

工厂设计模式是一种创建型设计模式,有简单工厂模式,工厂设计模式,抽象工厂模式

其中使用最多的是工厂设计模式,其次是抽象工厂模式,简单工厂模式因为其扩展性较差,而且工厂设计模式是简单工厂模式的升级,简单设计模式存在的意义就是更好的理解工厂设计模式

// 产品接口
interface Product {
    void use();
}

// 具体产品A
class ConcreteProductA implements Product {
    public void use() {
        System.out.println("Using ConcreteProductA");
    }
}

// 具体产品B
class ConcreteProductB implements Product {
    public void use() {
        System.out.println("Using ConcreteProductB");
    }
}

简单工厂模式;

      1.只需要对工厂传入一个参数,工厂就能返回该产品类的实例

     2.违背了开闭原则,每次增加一个新的产品类时,就需要修改工厂类的逻辑

代码示例:

// 简单工厂
class SimpleFactory {
    public Product createProduct(String type) {
        if (type == null) {
            return null;
        }
        if (type.equalsIgnoreCase("A")) {
            return new ConcreteProductA();
        } else if (type.equalsIgnoreCase("B")) {
            return new ConcreteProductB();
        }
        return null;
    }
}

// 客户端代码
public class SimpleFactoryDemo {
    public static void main(String[] args) {
        SimpleFactory factory = new SimpleFactory();
        Product productA = factory.createProduct("A");
        productA.use();
        
        Product productB = factory.createProduct("B");
        productB.use();
    }
}

 工厂设计模式:

       1.将具体工厂分离出来,单独写成一个类来实现共同的工厂接口

       2.符合开闭原则,需要添加新的工厂时,只需要写一个新的工厂类实现工厂接口,无需修改原有代码

      3.泛用性最强,使用最多的工厂设计模式

      4.无法解决多维度问题,比如同一个产品但是不同厂商,像是华为的手机和小米的手机,都是手机,但是要用工厂设计模式要写两个工厂类,目前还没问题,但是一旦产品多了起来,华为的有手机,笔记本,小米的有吹风机,手机,笔记本,这就是五个工厂,两个手机厂,两个电脑厂,一个吹风机厂,随着产品越来越多,扩展也越多,这就会导致代码堆叠的毫无章法. 

代码示例

// 工厂接口
interface Factory {
    Product createProduct();
}

// 具体工厂A
class ConcreteFactoryA implements Factory {
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂B
class ConcreteFactoryB implements Factory {
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端代码
public class FactoryMethodDemo {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.use();
        
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.use();
    }
}

 

抽象工厂设计模式:

    1.最顶层的工厂提供了创建一系列的相关对象的接口;

    2.每个具体工厂实现了该接口,并创建了具体的产品

   3.遵循开闭原则

// 抽象工厂
interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {
    public ProductA createProductA() {
        return new ConcreteProductA1();
    }
    public ProductB createProductB() {
        return new ConcreteProductB1();
    }
}

// 具体工厂2
class ConcreteFactory2 implements AbstractFactory {
    public ProductA createProductA() {
        return new ConcreteProductA2();
    }
    public ProductB createProductB() {
        return new ConcreteProductB2();
    }
}

// 客户端代码
public class AbstractFactoryDemo {
    public static void main(String[] args) {
        AbstractFactory factory1 = new ConcreteFactory1();
        ProductA productA1 = factory1.createProductA();
        ProductB productB1 = factory1.createProductB();
        productA1.use();
        productB1.use();
        
        AbstractFactory factory2 = new ConcreteFactory2();
        ProductA productA2 = factory2.createProductA();
        ProductB productB2 = factory2.createProductB();
        productA2.use();
        productB2.use();
    }
}

原文地址:https://blog.csdn.net/DA_YA_/article/details/143570494

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!