设计模式二、简单工厂模式——静态工厂模式

上一篇讲述了设计模式的原则,下面针对常用的设计模式进行描述

创建型模式:静态工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式

结构型模式:桥接模式、适配器模式、装饰器模式、代理模式、组合模式

行为型模式:模板方法模式、策略模式、观察者模式、责任链模式、命令模式、访问者模式

 

创建型模式:针对类创建所设计的模式

 简单工厂模式

设计原则:

  将类的创建统一到一个类内管理,类的创建过程对类的使用者透明。

示例

水果实体

public class Fruits {
private String name;
private String shape;

public Fruits(){
setName("水果");
setShape("无");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getShape() {
return shape;
}

public void setShape(String shape) {
this.shape = shape;
}
}

苹果实体

public class Apple extends Fruits {

    public Apple(){
        setName("苹果");
        setShape("圆的");
    }
}

橘子实体

public class Orange extends Fruits{

    public Orange(){
        setName("橘子");
        setShape("圆的");
    }

}

没有实现静态工厂前,创建苹果和橘子示例

public class FruitsController {

public static void main(String[] args) {
Fruits apple=new Apple();
System.out.println(apple.getName());
Fruits orange=new Orange();
System.out.println(orange.getName());
}
}

创建静态工厂

public class FruitsFactory {
public final static int TYPE_APPLE=1;//苹果
public final static int TYPE_ORANGE=2;//橘子

public Fruits getFruit(int type){
if(TYPE_APPLE==type){
return new Apple();
}else if(TYPE_ORANGE==type){
return new Orange();
}
return new Fruits();
}
}

通过传入的水果类型返回创建的水果实体——类型为1则创建苹果,类型为2则创建橘子

通过静态工厂进行水果创建

public class FruitsController {

    public static void main(String[] args) {
       FruitsFactory factory=new FruitsFactory();
    //通过水果类型创建水果 Fruits apple
=factory.getFruit(FruitsFactory.TYPE_APPLE); System.out.println(apple.getName());
    //通过橘子类型创建橘子 Fruits orange
=factory.getFruit(FruitsFactory.TYPE_ORANGE); System.out.println(orange.getName()); } }

特点:

  1、统一由工厂进行实体的创建,便于管理

  2、创建水果实体前需要知道水果对应的类型

  3、增加新的水果需要修改工厂代码:添加类型,增加逻辑判断

另一种通过方法替换类型来创建实体的静态工厂类

public class FruitsFactory2 {

    public Fruits getApple(){
       return new Apple();
    }

    public Fruits getOrange(){
        return new Orange();
    }
}

通过该工厂创建实体

public class FruitsController {

    public static void main(String[] args) {
       FruitsFactory2 factory=new FruitsFactory2();
       Fruits apple=factory.getApple();
        System.out.println(apple.getName());
       Fruits orange=factory.getOrange();
        System.out.println(orange.getName());
    }
}

特点:

  1、不需要类型进行判断,直接调用对应的方法进行实体创建

  2、可以通过防范备注表明方法的用处

  3、新增水果类型需要添加对应的方法

总结:

  1、 静态工厂管理实体的创建,可以统一实体创建的管理,让使用者专注类的使用,透明类的创建过程。

  2、静态工厂模式随着业务的新增需要修改代码

  3、该模式不符合设计模式中:单一职责原则——一个水果工厂类管理多个水果实体的创建;开闭原则——每次业务新增都要修改代码

posted @ 2019-09-05 15:25  青春的暗潮憧憬与追忆  阅读(263)  评论(0编辑  收藏  举报