1.设计模式的分类
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
这里我们先来聊聊工厂方法模式。
简单工厂模式、工厂方法模式、抽象工厂模式,都是属于创建型设计模式。严格上来说,简单工厂模式不属于23设计模式之一,因为它违背了开闭原则。
2.简单工厂模式(静态工厂模式)
先弄一个冰淇淋接口+3个口味的冰淇淋实现类
/**
* 冰淇淋接口、没有具体口味
* @author xingyanan01-lhq
*/
public interface IceCream {
public void makeIceCream();
}
/**
* 苹果口味冰淇淋
* @author xingyanan01-lhq
*/
public class AppleIceCream implements IceCream{
@Override
public void makeIceCream() {
System.out.println("制作一个苹果口味冰淇淋");
}
}
/**
* 橘子口味冰淇淋
* @author xingyanan01-lhq
*/
public class OrangeIceCream implements IceCream {
@Override
public void makeIceCream() {
System.out.println("制作一个橘子口味冰淇淋");
}
}
/**
* 香蕉口味冰淇淋
* @author xingyanan01-lhq
*/
public class BananaIceCream implements IceCream{
@Override
public void makeIceCream() {
System.out.println("制作一个香蕉口味冰淇淋");
}
}
造一个冰淇淋工厂,根据不同口味口令KEY来判断具体生产什么口味的冰淇淋
/**
* 冰淇淋工厂,根据传递的key来返回不同的冰淇淋类
* @author xingyanan01-lhq
*/
public class IceCreamFactory {
//这里注意一下,用静态static方法
public static IceCream creamIceCream(String key){
IceCream iceCream = null;
if("apple".equals(key)) {
iceCream = new AppleIceCream();
}
if("orange".equals(key)) {
iceCream = new OrangeIceCream();
}
if("banana".equals(key)) {
iceCream = new BananaIceCream();
}
return iceCream;
}
}
具体实现:
/**
* 客户端执行
* @author xingyanan01-lhq
*/
public static void main(String[] args) {
// 我告诉工厂,我想要个苹果口味冰淇淋
IceCream appleIceCream = IceCreamFactory.creamIceCream("apple");
appleIceCream.makeIceCream();
// 我告诉工厂,我想要个橘子口味冰淇淋
IceCream orangeIceCream = IceCreamFactory.creamIceCream("orange");