美文网首页
简单工厂模式

简单工厂模式

作者: 明朗__ | 来源:发表于2017-02-21 15:28 被阅读33次

1.简单工厂模式(这里只是简单举例 代码不规范处还需谅解)

原则: 提供创建对象的功能,不需要关心具体的实现

//创建一个汽车的抽象类
public abstract class Car {

    protected String name;

    protected final static String CARSTYLE = "汽车";

    public abstract String drive();

    public String getName() {
        return this.name;
    }
}
//子类实现父类
public class BackCar extends Car {
    @Override
    public String drive() {
        return name+Car.CARSTYLE;
    }
}
//创建一个工厂类负责具体的对象的创建
public class CarFactory {
    public static Car newCar(String color){
        Car car=null;
        switch (color){
            case "黑色":
                car=new BackCar();
                break;
            case "红色":
                car=new RedCar();
                break;
            case "蓝色":
                car=new BuleCar();
                break;
        }
        return car;
    }
}
//在客户的调用(根据传入的参数类型不同 而构建不同的对象)
 Car car = CarFactory.newCar(RED);
 tv_text.setText(car.drive());

由上可以看出 对对象的具体实现实现的隐藏

弊端:
1.不符合开闭原则 如果有新的对象生成 需要改写工厂类
2.不符合单一原则 工厂类是根据类型来判断创建哪种汽车的

二. 升级简单工厂方法

//创建一个注解类
@Target(ElementType.TYPE)//用于描述类、接口(包括注解类型) 或enum声明
@Retention(RetentionPolicy.RUNTIME)//即运行时保留
@Documented //用于描述其它类型的annotation应该被作为被标注的程序成员的公共API
@Inherited //修饰的annotation类型被用于一个class 则这个Annotation将被用于该class的子类。
public @interface CarColor {
    String color() default "";
}
//使用注解
@CarColor(color="BACK")
public class BackCar extends Car {
    @Override
    public String drive() {
        return name+Car.CARSTYLE;
    }
}
//创建工厂方法 根据对象类型来构建对应的对象
public class CarFactory2 {

    public static <T extends Car> T newCar(Class<T> c) {
        Car car = null;
        String identifier = null;
        try {
            Class componentClass = Class.forName(c.getName());
            if (componentClass.isAnnotationPresent(CarColor.class)) {//制定类型的注释存在该元素之上
                CarColor component = (CarColor) componentClass.getAnnotation(CarColor.class);
                identifier = component.color();
                System.out.println(String.format("颜色:' %s '", identifier));
            } else {
                System.out.println("com.jasongj.UpperCaseComponent is not annotated by"
                        + " com.jasongj.annotation.Component");
            }
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }

        try {
            car = (Car) Class.forName(c.getName()).newInstance();
            car.name = identifier;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return (T) car;
    }
}
//客户顿调用(传入对应的对象类型来构建对应的对象 其中应用到了反射和注解)
 car= CarFactory2.newCar(BuleCar.class);
 tv_text.setText(car.drive());

相关文章

  • [Android]三种工厂模式总结。

    Android中,工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。 一.简单工厂模式。 定义:简单工厂...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • 相近设计模式比较

    设计模式干货: 简单工厂模式 vs. 工厂模式 vs. 抽象工厂模式简单工厂和工厂模式区别? 简单工厂没有多个子类...

  • Android设计模式:工厂设计模式

    目录 简单工厂模式工厂方法模式抽象工厂模式 简单工厂模式 简单工厂模式是所有工厂模式的基础,不属于23种设计模式范...

  • 设计模式2-工厂模式

    工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式 简单工厂模式 简单工厂模式,就是建立一个工厂类,对实现了同一...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 设计模式-工厂模式

    一、工厂模式分类 简单工厂模式 工厂方法模式 抽象工厂模式 二、简单工厂模式 简单工厂就是讲需要new对象的那段代...

网友评论

      本文标题:简单工厂模式

      本文链接:https://www.haomeiwen.com/subject/kzpxwttx.html