码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-工厂模式

时间:2020-04-26 17:22:31      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:动态   拓展   oid   接口   java设计模式   client   测试   不能   对象   

首先,需要了解一下java设计模式6大原则中的开闭原则:只对 拓展开放,修改关闭。也就是你可以继承我的类来进行拓展,但不能重写我的方法。

如果将方法比喻为工厂,对象成为产品,工厂模式就是调用固定的方法来创建固定的对象,但是如果想添加新产品的时候会违反开闭原则。所以要将工厂方法和产品抽象化,添加新产品的时候不用修改原来的代码,也不用违反开闭原则。单一工厂生产单一产品,共同实现公共接口

公共抽象工厂来生产产品

abstract class Factory {
    public abstract Product produce();
}

公共抽象产品类

abstract class Product {
    public abstract  void work();
}

具体产品A

public class ProductA extends Product {
    @Override
    public void work() {
        System.out.println("生产第一种商品");
    }
}

具体工厂1生产产品A

public class FactoryA extends Factory {
    @Override
    public Product produce() {
        return new ProductA();
    }
}

具体产品B

public class ProductB extends Product {
    @Override
    public void work() {
        System.out.println("生产第二种商品");
    }
}

具体工厂B来生产产品B

public class FactoryB extends Factory {
    @Override
    public Product produce() {
        return new ProductB();
    }
}

测试类

public class Client {
    public static void main(String[] args) {
       //生产A产品
        FactoryA factoryA = new FactoryA();
        factoryA.produce().work();
       //生产B产品
        FactoryB factoryB = new FactoryB();
        factoryB.produce().work();
    }
}

在将工厂和产品都抽象化之后 好处和坏处是显而易见的

好处:真正满足了开闭原则,添加新产品只需要继承公共工厂类和公共产品类,无需修改公共类,单一职业,每个工厂只负责生产对应的产品

坏处:耦合度高了,如果产品变化,生产它的对应工厂代码也可能变化,而且代码是成对增加的。

应用场景:创建对象时不需要知道具体的类名,只需要委托给对应的工厂,创建好对象后可以再动态指定类型,

 


 

设计模式-工厂模式

标签:动态   拓展   oid   接口   java设计模式   client   测试   不能   对象   

原文地址:https://www.cnblogs.com/Vinlen/p/12780479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!