谈谈三种工厂模式
谈谈三种工厂模式
远在上个世纪,计算机技术的大牛们就总结出了23种设计及模式,这些设计模式解决了我们程序在模拟现实世界事物以及逻辑时,会出现的一些问题,以及对一些常见的系统设计中常见的问题提出一些解决方案。
工厂模式是一种常见的实例化对象的一种方式,告别了new的方法,更符合现实世界的逻辑,因为现实,对一些创建时需要配置一些东西的的问题是一种很好的解决方案,工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式;
简单工厂模式:通过一个创造方法来创造类,将需求传入进去可以的到相应的对象,值的一提的是简单工厂模式并不属于23种设计模式,=-=简单代码如下:
public Factory{ //工厂类 public Product create(String pro){ switch(pro){ case "A":return new ProductA(), case "B":return new ProductB() default:return null; } } } //产品父类 abstract class Product{} //产品子类A class ProductA extends Product{} //产品子类B class ProductB extends Product{}
工厂方法模式:简单工厂模式在处理简单几个简单固定的产品主类时是非常简单高效的的,但是在设计模式中唯一不变的是变化,就是说在这个模式的运行中各种东西实在不断变化的,比产品的种类数量,如果这个时候就要把Factory类中的创造方法改掉,着就对封装性很不合理,于是就出现了简单工厂模式的改进模式,工厂方法模式。工厂方法模式通过一个抽象的工厂类来创建工厂,再由工厂通过一定的方法创造一定的对象,这样如果有新的产C出现不需要修改已有代码只要新建一个产品的从子类和工厂的子类就可以啦,简单代码如下:
//抽象工厂类 abstract class Factory{ abstract Product create(); } //工厂A class FactoryA{ public Product create(){ return new ProductA(); }; } //工厂B class FactoryB{ public Product create(){ return new ProductA(); }; } //产品父类 abstract class Product{} //产品子类A class ProductA extends Product{} //产品子类B class ProductB extends Product{} public class App{ public static void main(String[] args){ Product p; Factory f=new FactoryA() //消费者类中创造A产品 p=f.create(); } }
抽象工厂模式:有了工厂方法模式,可以解决很大部分创造类的问题,但还有一个现实中的问题,有一个工厂的话可以创造一系列产品,如果工厂方法模式的话就需要创造一系列的工厂来完成这种效果,如何来解决这个问题呢?对于一些系列工厂问题就可以用一个可以系列描述的工厂来表示,每个工厂都有系列的的生产方法
这样就可以满足需求了,话不多说上代码:
//抽象工厂类 abstract class Factory{ abstract ProductA create(); abstract ProductB create(); } //工厂M class FactoryM{ public ProductA create(){ return new ProductA(); } public ProductB create(){ return new ProductB(); } } //工厂N class FactoryM{ public ProductA create(){ return new ProductA(); } public ProductB create(){ return new ProductB(); } } //产品父类 abstract class Product{} //产品子类A abstract class ProductA extends Product{} //产品子类B abstract class ProductB extends Product{} //系列M产品 class ProductAM extends ProductA{} class ProductBM extends ProductB{} //系列N产品 class ProductAN extends ProductA{} class ProductBN extends ProductB{} public class App{ public static void main(String[] args){ Product p; Factory f=new FactoryA() //消费者类中创造A产品 p=f.create(); } }
OK
最后,都是个人观点,感谢指错