出于对设计模式的学习复习,才决定写的这一系列文章,一方面是帮助自己更快的复习记忆,另一方面是帮助有需要的人快速入门,分享自己的学习内容吧。
先来张女神图亢奋一下,嘿嘿嘿~(四月是你的谎言)
概念和目的
设计模式是众多经验丰富的工程师经过大量的实验花费了很多很多时间才总结出来的,可以说是众多经验的结晶了。在所有的中、大型项目中,设计模式随处可见。使用设计模式,是为了提高代码的可重用性、可读性以及可靠性。适当的使用设计模式可以为日后扩展节省不少工作量,尽可能避免未知bug,提升项目性能。
设计原则
理所当然的,所有的设计模式首先都应该需要遵从的必须是程序开发的六大原则了。如果你对六大原则还不理解,可以看看这篇文章帮你快速了解:最通俗易懂的java 六大原则--代码解析。
分类
设计模式有20余种,可分为:
工厂模式
下面将讲解工厂模式,分为:
1、概念解析
2、简单工厂模式讲解:(1)简单工厂代码解析 (2)核心思想 (3)优缺点
3、工厂模式代码解析
4、工厂模式核心思想
概念解析
工厂模式定义一个用于创建对象的接口,就是基础的抽象接口,让不同的子类去继承实现,该方法可以使实例化延迟到子类。工厂模式属于创建型模式,就是隐藏创建过程,不再是new一个对象出来了。
工厂模式细化:简单工厂模式、工厂模式、抽象工厂模式。(简单工厂模式是工厂模式简化版,但是抽象工厂模式是一个单独的设计模式,不属于工厂模式。这里我将其合起来讲解)
这里将简单工厂模式和工厂模式合起来讲解,原因2点,内容很少,其次简单工厂模式不是设计模式,是工厂模式的简化版本。所以我们先看看简单工厂模式
简单工厂模式
简单工厂就是对于一个基本抽象接口有多个不同的实例,使用一个工厂去决定到底实例化哪个类。
简单工厂代码解析
(1)创建基本抽象接口
/**
* 车类的抽象接口
*/
public interface BaseCar {
//返回汽车的信息
String returnCar();
}
(2)创建不同的实例化类
/**
* 大汽车类
*/
public class BigCar implements BaseCar {
@Override
public String returnCar() {
return "BigCar";
}
}
/**
* 中型客车类
*/
public class MiddleCar implements BaseCar {
@Override
public String returnCar() {
return "middleCar";
}
}
/**
* 小气汽车类
*/
public class SmallCar implements BaseCar {
@Override
public String returnCar() {
return "smallCar";
}
}
(3)创建工厂
/**
* 工厂类,用于创建实例化对象
*/
public class CarFactory {
public static final String BIG_CAR = "BIG_CAR";
public static final String MIDDLE_CAR = "MIDDLE_CAR";
public static final String SMALL_CAR = "SMALL_CAR";
//根据具体的tye返回不同的实例化对象
public static BaseCar getCar(String type){
BaseCar baseCar = null;
switch (type){
case "BIG_CAR":
baseCar = new BigCar();
break;
case "MIDDLE_CAR":
baseCar = new MiddleCar();
break;
case "SMALL_CAR":
baseCar =new SmallCar();
break;
default:break;
}
return baseCar;
}
}
(4)调用
//创建一个smallcar
BaseCar smallCar = CarFactory.getCar(CarFactory.SMALL_CAR);
Toast.makeText(this, smallCar.returnCar(), Toast.LENGTH_SHORT).show();
核心思想
简单工厂相比于工厂模式,其创建过程不是在子类执行的,在工厂模式中已经执行了。简单工厂模式的核心思想就是把一系列相关联的类,即都是同一个接口的实现类放在一个单独的类中去实例化。让多个类可以通过一个工厂类就可以简单快速的创建对象。
优缺点:
优点:
1、简化创建流程,一步到位
2、屏蔽创建过程
缺点:
1、低扩展性,违背开闭原则
2、容易造成代码臃肿,不移维护
工厂模式
工厂模式就是对简单工厂模式的进一步解耦,简单工厂模式是所有的子类都在一个工厂实例化,我们知道,创建时的部分逻辑是可以写在工厂中的,但是多个子类实例化都在一个工厂中,那么该工厂类的逻辑部分一旦变多,就会显得臃肿,不便维护。于是将每个子类都创建一个单独的的工厂去实例化,就可解决这类问题。
代码解析
在上面简单工厂代码中做进一步解析
/**
* create time on 2019/5/30
* function: 创建一个bigcar工厂
*/
public class BigCarFactory {
public BigCar getCar() {
return new BigCar();
}
}
/**
* create time on 2019/5/30
* function: 创建一个MiddleCar工厂
*/
public class MiddleCarFactory {
public MiddleCar getCar() {
return new MiddleCar();
}
}
/**
* create time on 2019/5/30
* function: 创建一个SmallCar工厂
*/
public class SmallFactory {
public SmallCar getCar() {
return new SmallCar();
}
}
可以看到我们对三种车BigCar、MiddleCar 和SmallCar都分别创建了一个工厂,在activity中创建一个看看
SmallCar smallCar = new SmallFactory().getCar();
一行代码即可创建出具体的类。
核心思想
对于工程模式的创建,他的核心思想就是将实例化延迟到子类中。需要什么类就单独为这个类创建一个工厂类,让这个工厂类创建我们需要的类。免去了创建流程。符合迪米特原则(最少知道原则)。
优缺点
优点:扩展性高,屏蔽创建过程,简化流程。
缺点:每增加一个产品,都需要增加一个具体类和实现工厂,类的数量变成双倍。(这里说的是工厂模式,不是简单工厂)一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
更多设计模式更新中,请持续关注哦~......