wordpress豆瓣插件,北京seo实战培训班,网站设计与网站建设,积分网站运营建设投标书工厂的作用相当于帮助我们完成实例化的操作。
优势1#xff1a;一般在代码中#xff0c;实例化一个类A是直接new A#xff08;#xff09;#xff0c;假如类A是一个完全独立的类#xff0c;没有相似类#xff0c;则没有必要使用工厂模式#xff0c;直接new A#xff…工厂的作用相当于帮助我们完成实例化的操作。
优势1一般在代码中实例化一个类A是直接new A假如类A是一个完全独立的类没有相似类则没有必要使用工厂模式直接new A没有毛病。但是如果类A本身有一个相似类B而在实际使用类A或者类B的实例时如果关心的是类A与类B的共同部分则工厂模式就可以体现出它的优势。
比如调用数据库所有的数据库都有插入操作insert:
interface DatabaseOperate{ public void insert(Mydata data){ } }
然而不同的数据库的具体实现方法是不同的 class MySQLOperate implements DatabaseOperate{ Override public void insert(Mydata data){ ... } } class OracleOperate implements DatabaseOperate{ Override public void insert(Mydata data){ ... } } 然而真正使用插入操作的时候我们需要关心的并不是插入操作如何具体实现我们只需要对数据库进行插入操作就行了所以使用工厂类对具体实现方法进行整合
class MyDBFactory{ public static int MySQL1; public static int Oracle2; public static int DBType MySQL; public static DatabaseOperate getDatabase(){ if(DBTypeMySQL){ return new MySQLOperate(); } if(DBTypeOracle){ return new OracleOperate(); } } } 这样我们在调用的时候就可以忽略具体实现方法而直接进行调用。 void insert(Mydata data){ DatabaseOperate operate MyDBFactory.getDatabase(); operate.insert(data); } 在这里工厂模式相当于实现了下面的代码。 class MySQLOperate{ public void insert(Mydata data){ ... } } void inert(Mydata data){ MySQLOperate opertate new MySQLOperate(); operate.insert(data); } 如果这样编写在进行数据库切换时需要重新写insert()方法尤其是在很多地方用到与insert()方法相同的操作时要在很多地方new MySQLOperate这个类修改起来跟家麻烦。 这个优势有两个应用场景
一个是上述的例子可以动态的使用代码只需要修改部分配置。
还有一个是在一个大类需要很多小类的时候每种小类负责完成一部分工作但是有不同的完成方法大类只需要设置条件工厂自动返回合适的小类。
优势2初始化封装。在需求一个类的实例时假如需要一个相同属性的实例每次初始化的操作是一样的用工厂模式可以对初始化进行封装简化操作。
比如有一个类Car
class Car{ private String brand; private double price; public Car(String brand,double price){ this.brandbrand; this.priceprice; } }
我们在实例化一个Audi的时候赋值brand为Audiprice为30000
void createCar(){ Car car1 new Car(Audi,300000); Car car2 new Car(Audi,300000); } 每次要用到Audi这个实例的时候都要给定两个初始化参数Audi和30000然而如果确定了brand为Audi的话price随之确定为300000每次实例化的时候要输入多个 这里是两个参数会显得很麻烦。 所以我们这里使用工厂模式 public CarFactory
{ private MapString,Car cars new HashMap(); static { cars.put(Audi,new Car(Audi,300000)); } public static Car getCar(String name) { return cars.get(name); } } 然后我们在实例化Audi时只需要输入他的名称就可以得到参数完整的Audi void createCar(){ Car car1 CarFactory.getCar(Audi); Car car2 CarFactory.getCar(Audi); } 这样大大简化了实例化时的初始化设置。 --------------------- 作者zinsserzc 来源CSDN 原文https://blog.csdn.net/qq_28859325/article/details/60580578 版权声明本文为博主原创文章转载请附上博文链接