前言
设计模式之工厂模式, 其实主要有三者:简单工厂、工厂和抽象工厂;这三者中,抽象工厂最复杂的,也是最难理解的,但是没法虽然难,但是还得学。
一、工厂模式
1.1、含义
工厂模式的含义:就是指在开发编程时,将界面逻辑和业务逻辑进行,分离,实现解耦。
俗话来讲:就是在网络上购物的时候,我们在购买的是商品,所以根本不需要了解它是怎么生产的,在哪儿生产的,这商品就属于界面,我们能看到;它怎么生产的,在哪儿生产的就属于业务逻辑。
1.2、工厂设计模式的核心
核心是指:
- 实例化对象不使用new,而用工厂方法代替
- 将选择实现类、创建对象统一进行管理和控制。从而将调用者和我们的实现类解耦。
1.3、三种模式
简单工厂: 用来生产同一等级结构中的任意产品(对于增加新的产品,就需要将源代码全部覆盖) 工厂方法模式: 用来生产同一等级结构中的固定产品(支持添加任意产品) 抽象工厂模式: 围绕一个超级工厂创建其它工厂。该工厂又称为其它工厂的工厂。1.4、工厂模式的代码实现
- 简单工厂:
/*这是一个汽车工厂,用于客户如果想要购买车,则会创建返回一个车的
对象,而客户不需要了解这车是怎么来的,从哪儿来的。
*/
public class CarFactory {
//用户输入想要买的车的名称,这该方法返回具体的参数
public static Car getcar(String car){
if (car.equals("五菱")){
return new WuLing();
}else if (car.equals("特斯拉")){
return new TeSiLa();
}else {
//如果没有这提示用户没有该车
return null;
}
}
}
简单工厂模式:确是三者中使用最多的工厂模式,所有虽然设计原则上是不规范的,但是现实中却是使用的最多的。
2. 工厂模式:
//总工厂
public interface CarFactory {
Car getCar();
}
//具体的工厂
public class TeSiLaFactory implements CarFactory{
@Override
public Car getCar() {
return new TeSiLa();
}
}
//具体的工厂
public class WuLingFactory implements CarFactory {
@Override
public Car getCar() {
return new WuLing();
}
}
总工厂中有一个抽象方法是用于返回车的,这样用户在买车的时候,就不用在创建车这个对象,实现业务逻辑和界面显示就分开了,而且也解决了简单工厂中的会违背开闭原则的问题。
- 抽象工厂:
//手机接口
public interface IphoneProduct {
void start();
void shutdown();
void collUp();
void sendSMS();
}
//路由器接口
public interface IRouterProduct {
void start();
void shutdown();
void oppenwifi();
void setting();
}
//小米工厂
public class XiaomiFactory implements IProductFactory{
@Override
public IphoneProduct iphoneproduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct irouterproduct() {
return new XiaomiRouter();
}
}
//华为工厂
public class HuweiFactory implements IProductFactory{
@Override
public IphoneProduct iphoneproduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct irouterproduct() {
return new HuaweiRouter();
}
}
抽象工厂模式:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
模式的结构:
- 抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
- 具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
- 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
- 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系
抽象工厂是更大的工厂,是以一个总类(抽象接口),依次往下传递,构造一个链,这样修改时,只需要添加一个就可以了。
总结
工厂设计模式是6中常用设计模式中,最具有挑战性的模式,虽然简单,但是说时候,真用起来还是有些困难。