标签:动态 拓展 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